美文网首页
JavaScript 里的数据类型转换

JavaScript 里的数据类型转换

作者: 封燐 | 来源:发表于2018-10-17 16:24 被阅读0次

任意类型转字符串

  1. String(x)
  2. x.toString()
  3. x + ''

    +运算符会尝试先把两边的东西转换成相同类型(优先字符串)

任意类型转数字

  1. Number(x)
  2. parseInt(x, n)
    n表示x的进制,缺省值为10
  3. parseFloat(x)
  4. x - 0
  5. + x

任意类型转布尔

  1. Boolean(x)
  2. !! x
    JS里只有6个falsy值:0,NaN,false,''(""),null,undefined。
    对象(包括空对象{})全都是 true 。

内存图

内存分为代码区和数据区,数据区分为Stack栈内存和Heap堆内存。
简单类型存放在Stack里。
复杂类型(Object)存放在Heap里,Stack里存放对应Heap里的地址。这种关系叫引用。
画内存图理解问题实例:


实例1
实例2
实例3
实例4
实例5
实例6

GC 垃圾回收

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


此时fn不是垃圾,因为有东西在引用它
如果把页面关闭,document就不存在了,三个对象都成为了垃圾。

IE 6 的 Bug:关闭页面的时候不会把上面的对象当成垃圾,内存会一直占用,除非关闭浏览器。
解决方法:把页面所有监听的事件置为null

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

深拷贝与浅拷贝

在上面的内存图实例1中,b变不影响a,就是深拷贝。
基本类型的赋值都是深拷贝。
在上面的内存图实例3中,b变致a变,就是浅拷贝。
对象的深拷贝需要所有的引用都是独立的,不能和原来的有交差重叠部分。

相关文章

网友评论

      本文标题:JavaScript 里的数据类型转换

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