任意类型转字符串
-
String(x)
-
x.toString()
-
x + ''
+
运算符会尝试先把两边的东西转换成相同类型(优先字符串)
任意类型转数字
Number(x)
-
parseInt(x, n)
n表示x的进制,缺省值为10 parseFloat(x)
x - 0
+ x
任意类型转布尔
Boolean(x)
-
!! x
JS里只有6个falsy值:0,NaN,false,''(""),null,undefined。
对象(包括空对象{})全都是 true 。
内存图
内存分为代码区和数据区,数据区分为Stack栈内存和Heap堆内存。
简单类型存放在Stack里。
复杂类型(Object)存放在Heap里,Stack里存放对应Heap里的地址。这种关系叫引用。
画内存图理解问题实例:
实例1
实例2
实例3
实例4
实例5
实例6
GC 垃圾回收
如果一个对象没有被引用,
那么它就是垃圾,
将会被回收。
此时fn不是垃圾,因为有东西在引用它
如果把页面关闭,document就不存在了,三个对象都成为了垃圾。
IE 6 的 Bug:关闭页面的时候不会把上面的对象当成垃圾,内存会一直占用,除非关闭浏览器。
解决方法:把页面所有监听的事件置为null
window.onunload = function(){
document.body.onclick = null
}
深拷贝与浅拷贝
在上面的内存图实例1中,b变不影响a,就是深拷贝。
基本类型的赋值都是深拷贝。
在上面的内存图实例3中,b变致a变,就是浅拷贝。
对象的深拷贝需要所有的引用都是独立的,不能和原来的有交差重叠部分。
网友评论