JS 里的数据类型转换
JS一共有七种数据类型,分别是:
基本数据类型:数值(number)、字符串(string)、布尔(boolean)、null、undefined和symbol。
复杂数据类型:对象(object)
七种数据类型之间有的可以互相转换。
1.转换为string
number
2.转换为boolean
5个falsy值(转换结果为false): NaN、0、null、undefined、''
其余转换结果均为true
转换方: 1. Boolean()
2. !!0 === false
3.转换为number
转换方法:1. Number('1') === 1
2. parseInt('1',10) === 1 parseInt('s',10) === NaN parseInt('1s',10) === 1
3. parseFloat('1.23') ===1.23
4. '1' - 0 === 1
5. + '1.23' === 1.23
内存图
基本数据类型直接存在Stack(栈内存)。
复杂数据类型只在stack内存一个地址,而内容存在Heap(堆内存)中,通过地址产生联系。
例题:
var a = {n:1}
var b = a
a.x = a = {n:2}
alert(a.x) //undefined
alert(b.x) //{object Object} alert会把结果转换成字符串
垃圾回收
如果一个对象没有被引用,它就是垃圾,将被回收。
例题:
var fn = function() {}
document.body.onclick = fn
fn = null
问: function(){}是否是垃圾?
答: 不是
深拷贝和浅拷贝
var a = 1
var b = a
b = 2
//a = 1 ,b变不影响a
//深拷贝(基本类型赋值都是深拷贝,所以只讨论对象)
var a = {name: 'a'}
var b = a
b.name = 'b'
//a.name = 'b'
//b变导致a变,浅拷贝