JS中数据类型可以相互转换
任意类型转换成成字符串
x.toString
这种方法可以将number,boolean,object 转换为字符串,undefined和null类型不行
image.png
String(x)
这种方法可以将任意类型转换成字符串
image.png
使用x+""(实际工作中应使用这种)
这种方法可以将任意类型转换成字符串
image.png
任意类型转换成数字
1.Number(x)
无法转换的返回NaN
2.parseInt(x, 10)转换整数
从左往右转换,碰到无法转换的就停止,返回已经转换好的;若首部位置都无法转换,返回NaN
3.parseFloat(x)转换浮点数
从左往右转换,碰到无法转换的就停止,返回已经转换好的;若首部位置都无法转换,返回NaN
4.x - 0
5.+x
任意值转换成布尔值
Boolean(x)
image.png!!x
image.png
内存图
JS 引擎将内存分为代码区和数据区
数据区分为 Stack(栈内存) 和 Heap(堆内存)
简单类型的数据直接存在 Stack 里(除object外的其他数据类型)
复杂类型的数据是把 Heap 地址存在 Stack 里
遇到问题就画图,不要分析。
深复制和浅复制
var a = 1
var b = a
b = 2 //这个时候改变 b
a 完全不受 b 的影响
那么我们就说这是一个深复制
对于简单类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
这是一个浅拷贝的例子
var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true
因为我们对 b 操作后,a 也变了
什么是深拷贝了,就是对 Heap 内存进行完全的拷贝
var a = {name: 'frank'}
var b = deepClone(a) // deepClone 还不知道怎么实现
b.name = 'b'
a.name === 'frank' // true
网友评论