1.任意类型转字符串:
- String()
String(1) //"1"
String(true) //"true"
String(null) //"null"
String(undefined) //"undefined"
- a.toString()
(1).toString() //"1"
true.toString() //"true"
- a + ''
1 + '1' //"11"
true + '' //"true"
null + '' //"null"
undefined + '' //"undefined"
2.任意类型转数字
- Number(x)
- parseInt(x, 10)(x为要转的字符串,第二个参数是被解析的值的进制,然后返回该值对应的十进制数)
- parseFloat(x)
- x - 0
- +x
3.任意类型转布尔
- Boolean(x)
- !!x
五个特殊值:0 NaN '' null undefined 转boolean是false,其余为true
4.内存:
浏览器分给页面JS的内存大概100M,分为代码区和数据区,数据区又分为栈内存(stack)和堆内存(heap),简单类型的数据(Number/String/null/undefined/Symbol/boolean)直接存在stack里,复杂数据类型(Object)是把Heap地址存在stack里面,方便数据增删操作。
5.垃圾回收:
如果一个对象没有被引用,就会变成垃圾,浏览器就会回收这些垃圾,释放它们占用的内存,然后把这些内存重新分配给新页面或者其他需要的地方使用。
IE6在页面关闭时该回收的垃圾没有被及时回收,直到整个浏览器关闭再回收,就会造成内存泄漏。解决方法是在页面关闭时手动把没有被引用的函数设为null
例如:
window.onunload = function(){
document.body.onclick = null;
}
6.深拷贝:
var a = 1;
var b = a;
b = 2;
console.log(a); //1
console.log(b); //2
深拷贝就是无论b怎样变化a的值都不会受到b的影响,对于简单数据类型,赋值就是深拷贝
7.复杂数据类型的浅拷贝:b改变导致a受到影响跟着改变
var a = {name: 'xiaoming'}
var b = a
b.name = 'xiaohong'
a.name === 'xiaohong' // true
复杂数据类型的深拷贝:对Heap内存完全拷贝
var a = {name: 'vision'}
var b = deepClone(a)
b.name = 'b'
a.name === 'vision' // true