美文网首页web 杂谈
js赋值运算的理解

js赋值运算的理解

作者: 高少辉_骚辉 | 来源:发表于2017-05-21 13:24 被阅读6次

    简介

    1. js引擎由于为了效率,很多时候的非直接量赋值都不是copy一份在赋值给新的变量,而是一个引用
      ps:直接量:直接值数字字符串等
    2. 为什么使用len = doms.length; 里的len效率要比doms.length高

    js赋值运算的理解

    我们先来看一个例子

    var parent = {
        x : 1,
        y : 2
    };
    var child = parent;
    child.x = 3;
    console.log( parent.x ); //=>3
    

    从上面这个例子可以看出,当把parent赋值给child的时候并不是把parent克隆一份然后再赋值给child,实则child只是parent的一个引用

    而直接量可以这么解释

    看例子:

    var parent = 5;
    var child = parent; //也可以说是把parent的引用赋值给child
    child = 3; // 但是这里的 直接量3的引用把parent的引用给覆盖了 而其实parent也是引用这个直接量
    console.log( parent ); //=>5
    

    那有人可能会举这样的例子

    var parent = 5;
    var child = parent;
    child.x = 2;
    console.log( parent.x ); //=>undefined
    

    说这里总是没有把paient的引用给覆盖了,而只是给child加了一个属性,那么为什么parent.x 为 undefined 呢?这里你可能要去看一下我之前的一篇博客了关于js的包装对象

    为什么使用len = doms.length; 里的len效率要比doms.length高

    因为使用 getElementsByTagName函数获取到的doms是一个动态的伪数组,length属性是一个动态计算的。所以当每次使用doms.lenth的时候都进行了一次计算,而把doms.length赋值给len以后 len存的是计算的结果,是一个直接量,故效率肯定高。

    其它还有一些使用赋值运算会使效率提高,因为变量里放的是计算过后的结果,如:

    • var div = document.geElementById('div'); //此类的获取元素 div获得了直接的引用,下回就不用再由getElementById来计算引用

    那么如果我们要copy一份第一个例子中的对象该怎么办?

    遍历对象所有属性和方法,一一把属性方法复制过去

    var parent = {
        x : 1,
        y : 2
    };
    var child = {};
    for( var i in parent ){
        child[i] = parent[i];
    }
    

    而child.x 引用的直接量是parent.x而parent.x引用的直接量是1,所以它们引用同一个直接量,是不是有点绕,哈哈

    相关文章

      网友评论

        本文标题:js赋值运算的理解

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