类型转换
任意类型转字符串
String()
1
2
3
4
5String(1) // "1"
String(true)//"ture"
String(null)//"null"
String(undefined)//"undefined"
String({})//"[object Object]".toString()
1
2
3
4
5(1).toString() // "1"
(true).toString()//"ture"
(null).toString()//"报错"
(undefined).toString()//"报错"
({}).toString()//"[object Object]"+’’
1
2
3
4
5
61+''//"1"
true+''//"true"
null+''//"null"
undefined+''//"undefined"
var n={}
n+''//"[object Object]"
任意类型变布尔(boolean)
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。
- undefined 2. null 3. false 4. 0 5. NaN 6. “”或’’(空字符串)
Boolean()
1
2Boolean(1)//true
Boolean(0)//false!!()
1
2!!(1)//true
!!(null)//false
任意类型变数字(number)
Number()
1
Number('1')//1
parseInt(string, radix)
1
2parseInt(10, 10)//10
parseInt(110, 2)//6parseFloat()
1
2
3
4
5parseFloat("3.14");
parseFloat("314e-2");
parseFloat("0.0314E+2");
parseFloat("3.14more non-digit characters");
//均返回 3.14-0
1
'1.23'-0//1.23
+(取正)
1
2+'3.14'//3.14
+'-3.14'//-3.14
内存图

深拷贝浅拷贝
1 | var a = 1 |
那么我们就说这是一个深拷贝
对于简单类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
这是一个浅拷贝的例子
1
2
3
4
5var a = {name: 'w'}
var b = a
b.name = 'b'
a.name === 'b' // true
//因为我们对 b 操作后,a 也变了深拷贝
什么是深拷贝了,就是对 Heap 内存进行完全的拷贝。1
2
3
4var a = {name: 'frank'}
var b = deepClone(a) // deepClone 还不知道怎么实现
b.name = 'b'
a.name === 'a' // true