类型转换
任意类型转字符串
- Sting(x)
- x.toString()
- x + ‘’
任意类型转数字
- Number(x)
- parseInt(x, 10) MDN
- parseFloat(x) MDN
- x - 0
- +x
任意类型转布尔
- Boolean(x)
- !!x
内存图
数据区分为 Stack(栈内存) 和 Heap(堆内存) 简单类型的数据直接存在 Stack 里 复杂类型的数据是把 Heap 地址存在 Stack 里
1 | var a = 1 |
1 | var a = {name: 'a'} |
1 | var a = {name: 'a'} |
1 | var a = {name: 'a'} |
浏览器是先从左到右分析变量,再从右往左计算。所以a.x和a在stack里的地址不同。
1
2
3
4
5
6var a = {n:1};
var b = a;
var a.x = a = {n:2};
alert(a.x); // undefined
alert(b.x); // [object object]
垃圾回收
清理没有被stack区引用的heap区对象,释放内存空间,供其他对象使用。
深拷贝
对于简单类型的数据来说,赋值就是深拷贝。 对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
1 | var a = 1 |
1 | var a = {name: 'frank'} |