类型转换
任意类型转字符串
- String(x)
- x.toString()
- x + ‘’
任意类型转数字
- Number(x)
- parseInt(x, 10)
- parseFloat(x)
- x - 0
- +x
任意类型转布尔
- Boolean(x)
- !!x
五个falsy值,其余全为true
- 数字0
- NaN
- ''或""(空字符串)
- null
- undefined
如:
!!(null) 结果显示:false
!!(0) 结果显示:false
!!(1) 结果显示:true
!!(‘Mindy’) 结果显示:true
内存图
- 第一题:
var a = 1
var b = a
b = 2
请问 a 显示是几?
a=1
- 第二题:
var a = {name: 'a'}
var b = a
b = {name: 'b'}
请问现在 a.name 是多少?
a.name=‘a’
- 第三题:
var a = {name: 'a'}
var b = a
b.name = 'b'
请问现在 a.name 是多少?
a.name=‘b’
4.第四题:
var a = {name: 'a'}
var b = a
b = null
请问现在 a 是什么?
a.name=‘a’
JavaScript数据存储
数字64位
字符16位
Stack栈 heap堆
简单的值存stack中(除object之外的所有)
object存堆中,地址存放于stack中(引用)
浅复制&深复制
对于简单类型的数据来说,赋值就是深拷贝,如上面的例题一。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。
一个浅拷贝的例子:(对b进行操作后,a的值也变了)
var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true
一个深拷贝的例子:(对b进行操作,a无动于衷)
var a = {name: 'frank'}
var b = deepClone(a) // deepClone 还不知道怎么实现
b.name = 'b'
a.name === 'frank' // true