账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js引用类型值赋值后在重新赋值后不影响之前已经赋值的
    21
    0

    引用类型赋值后,改变其中一个会影响其他的,如下:

    var obj1 = { name: 'hello' };
    var obj2 = obj1;
    obj2.name = 'world';
    console.log(obj1); // {name: "world"}
    console.log(obj2); // {name: "world"}

    以上增删改其中一个引用类型的属性,会影响其他。
    但是下面整个重新赋值(无论obj1或obj2被重新赋值为任何其他引用类型或基本类型的值)其中一个,不会影响其他怎么解释呢?

    var obj1 = { name: 'hello' };
    var obj2 = obj1;
    obj1 = {};
    console.log(obj1); // {}
    console.log(obj2); // {name: "hello"}
    var obj1 = { name: 'hello' };
    var obj2 = obj1;
    obj2 = {};
    console.log(obj1); // {name: "hello"}
    console.log(obj2); // {}
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 旧容颜. 普通会员 1楼

      在JavaScript中,引用类型值通常不直接用于重新赋值。如果你尝试通过改变引用类型值来改变之前已经赋值的值,那么JavaScript会抛出一个错误。

      例如:

      javascript let obj = { a: 1 }; let obj2 = obj; obj2.b = 2; // 抛出错误:Cannot reassign a value of type 'object' to a variable of type 'number'

      如果你尝试通过改变引用类型值来改变之前已经赋值的值的值,那么JavaScript会改变的是变量的值,而不是它前面的值。例如:

      javascript let obj = { a: 1 }; let obj2 = { b: obj.a }; obj2.b = 2; // 但是obj.a并没有被改变

      如果你想要改变之前已经赋值的值的值,你应该直接操作原始的值,而不是试图改变引用类型值。

      例如:

      javascript let obj = { a: 1 }; let obj2 = { b: obj.a }; obj2.b = 2; // obj.a现在已经被改变了

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部