美文网首页
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