-
任意类型转字符串
1. x + '': null + '' // "null"
2. x.toString() :注意此种方法用在null、undefined上会报错
(123).toString() // "123"
3. String(x): String(123) // "123"
-
任意类型转布尔
1. Boolean(x):注意object无论是否为空,均为true
2. !!x
要记住5个falsy值:0、NaN、''、null、undefined(这五个转为布尔值均为false)
object(对象)转为布尔全部都是true(包含数组与函数)
-
任意类型转数字
1. number(x) :number('1') // 1
2. parseInt(x,10) :任意类型转整数
默认为10进制整数转10进制整数,第二个参数可改为2(2进制整数转10进制整数)、
8(8进制整数转10进制整数)、10(10进制整数转10进制整数)、16(16进制整数转10进制整数)
例如: parseInt('1000',8) // 512
3. parseFloat(x):任意类型转浮点数(小数)
4. x - 0:这是常用方法
5. +x
任意类型转null与undefined不讨论,因为不需要。
-
内存图
如上图所示JS 引擎将内存分为代码区和数据区,这里主要看的是数据区。
数据区可分为Stack(栈内存) 和 Heap(堆内存):
1.Stack(栈内存):简单类型的数据直接存在 Stack 里
2.Heap(堆内存):复杂类型的数据存在Heap中,然后把 Heap中所存数据的地址存在 Stack 里
-
GC(Garbage collection)垃圾回收
垃圾回收:如果一个对象没有被引用,那么他就是垃圾,将被回收
注意:IE6中有个BUG,不能再页面当前标签关闭时就把document中的引用变为垃圾(其他浏览器均可)。这便导致了内存泄漏,使得该被标记为垃圾的东西没有被标记为垃圾,内存会永久占着,直到将整个浏览器关闭。
下面这个API可以解决这个问题:
window.onunload = function(){
document.body.onclick = null
}
-
浅拷贝与深拷贝
深拷贝:b变不影响a
var a = 1
var b = a
b = 2 //结果: b = 2, a = 1
浅拷贝:b变导致a变(就是对Heap内存的数据进行完全拷贝)
var a = {name:'a'}
var b = a
b.name = 'b' //结果:a.name = ‘b'
1.对于简单类型的数据,赋值就是深拷贝
2.对于复杂类型的数据(对象)才需要区分浅拷贝与深拷贝