js里的数据类型转换

类型转换

任意类型 转 字符串

1、String(x)

String(x)

2、x.toString()

x.toString()

3、x+''

x+''

任意类型 转 数字

1、Number(x)
2、parseInt(x, 10)MDN
3、parseFloat(x)MDN
4、x - 0
5、+x

任意类型转布尔

1、Boolean(x)
2、!!x

内存图

1
2
3
4
var a = 1
var b = a
b = 2
请问 a 显示是几?

a=1

1
2
3
4
var a = {name: 'a'}
var b = a
b = {name: 'b'}
请问现在 a.name 是多少?

a.name = 'a'

1
2
3
4
var a = {name: 'a'}
var b = a
b.name = 'b'
请问现在 a.name 是多少?

a.name = 'b'

1
2
3
4
var a = {name: 'a'}
var b = a
b = null
请问现在 a 是什么?

a = {name: 'a'}

深复制 VS 浅复制

1
2
3
4
5
var a = 1
var b = a
b = 2 //这个时候改变 b
//a 完全不受 b 的影响
//那么我们就说这是一个深复制

对于简单类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。

这是一个浅拷贝的例子

1
2
3
4
var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true

因为我们对 b 操作后,a 也变了

什么是深拷贝了,就是对 Heap 内存进行完全的拷贝。

1
2
3
4
var a = {name: 'frank'}
var b = deepClone(a) // deepClone 还不知道怎么实现
b.name = 'b'
a.name === 'a' // true