js变量操作的是值还是地址

作者: csRyan | 来源:发表于2017-03-07 20:28 被阅读111次

    当我们将变量赋值为原始类型(undefined、null、boolean、number、string)的时候,变量直接保存这个值:

    var a = 111;
    var b = a;  //  直接将111这个值复制到了b中
    b = 222;
    console.log(a);  //  111
    

    b = 222之前:

    变量名 变量中存的数据
    a 111
    b 111

    b = 222之后:

    变量名 变量中存的数据
    a 111
    b 222

    当我们将变量赋值为对象的时候,变量保存的是这个对象在内存(堆)中的地址:

    var a = {z:111};
    var b = a;  //  将{z:111}这个对象的地址复制到b中,现在a和b指向同一个内存区域
    b.z = 222;
    console.log(a.z);  //  输出222,因为b.z和a.z是内存中同一个地方
    

    b.z = 222;之前:

    变量名 变量中存的数据
    a 0xABCD(指向内存中的{z:111})
    b 0xABCD

    b.z = 222;之后:

    变量名 变量中存的数据
    a 0xABCD
    b 0xABCD

    可见b本身保存的数据没有变化,变化的是0xABCD所指向的、内存中的对象。

    数组、函数也是对象,将它们赋值给变量时也保存地址

    js的赋值、传参全部都是按值传递,只不过这个“值”有时候是地址而已。

    相关文章

      网友评论

        本文标题:js变量操作的是值还是地址

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