美文网首页让前端飞饥人谷技术博客
JS数据类型转换. && 垃圾回收 &am

JS数据类型转换. && 垃圾回收 &am

作者: 小7丁 | 来源:发表于2018-12-07 14:57 被阅读8次

一、任意类型转字符串

1. xxx.toString()

image

其中null、undefined不能用,object不能转换成相对应的。

2. x + ''

这个最为常用
都能转换

3. String() 功能和2一样强大


二、任意类型转布尔

1. xxx.Boolean()

2. !!x (墙裂推荐,比较好装逼)

  • 所有数据类型中只有5个例外是falsy值,对象是没有falsy值的(空数组也是true)的
    number: 0 和 NaN
    string: ''
    null
    undefined

三、如何转换成number?

'1' -> 1

  1. Number('1')
  2. parseInt('1', 10)
  3. parseFloat(‘1.23’)
  4. '1'- 0 (最常用)
  5. +'1'

四、内存

stack 栈内存(number、string、undefined、symbol、boolean,简单)
Heap 堆内存(对象在这,地址,复杂)

var a = {name: a}
b = a
b = {name: b}
a.name = ?
image

a

var a = {name: a}
b = a
b.name = b
a.name = ?

b

var a = {name: a}
b = a
b = null
a = ?

{name: a}

引用类型易错题


image

垃圾回收

如果一个对象没有被引用,它就是垃圾,将被回收

var fn = function () {}
document.body.onclick = fn
fn = null

function(){}是不是垃圾?

image 不是

若把页面关了,则fn变成垃圾,heap里面的东西也是垃圾。但IE6认为heap里面不是垃圾,所以这是IE6的bug,用如下方式解决:

window.onunload = funtion () {
    document.body.onclick = null
}

在页面关闭之前,把所有事件都置为null


浅拷贝 vs 深拷贝

基本类型的赋值都是深拷贝。
现在只讨论复杂类型即对象的情况:

深拷贝:我被赋值之后,你不变
浅拷贝:我被赋值之后,你也变

相关文章

网友评论

    本文标题:JS数据类型转换. && 垃圾回收 &am

    本文链接:https://www.haomeiwen.com/subject/mrmthqtx.html