JavaScript:无效指向对象的变量会使变量无效而不是对象吗?

时间:2016-06-22 21:41:43

标签: javascript variables javascript-objects

基本上,我有一个重度嵌套对象,所以我创建了变量来访问该对象,所以我不必编写整个嵌套对象来执行操作。

问题在于,当我创建一个变量并通过将其设置为null来操作它时,该变量被设置为null,但它引用的对象却没有。

从概念上讲,我有点理解发生了什么,但是如果那是怎么回事,那么我对javascript的基本属性已经错了大约4年......这是好的,错误的是增长如何发生,但仍然如此。

var thing = { 
    content: { 
        area: { 
            row: { 
              column: {a: 'a', b:'b', c:'c'} 
            } 
        } 
    } 
} 

var contentArea = thing.content.area;
var row = contentArea.row
var column = row.column;

column = null;
console.log(row.column);
// logs  {a: "a", b: "b", c: "c"}
console.log(column);
// logs null
row.column = null;
console.log(row.column);
// logs null.

任何人都可以告诉我为什么会这样,并指出我可以阅读更多关于它为什么会发生的参考?

值得注意的是,如果你尝试设置某些东西而不是使某些东西无效,那么这种变化就会持续存在。的种类。不要将上面的内容设置为null,请尝试以下方法:

column.a = 'purple';
console.log(row.column);
console.log(column);
//both log {a: "purple", b: "b", c: "c"}

但是如果你试图将对象设置为其他东西,它就不会持久存在于对象中:

column = 'purple'
console.log(row.column);
console.log(column);
// logs {a: "a", b: "b", c: "c"}
// 'purple

1 个答案:

答案 0 :(得分:1)

看看这里:Evaluation Strategy - Call by SharingSO question

基本上归结为:

  1. 在Javascript中设置变量会将其指向一个新的'值' (原始对象)。这就是为什么将column取消或设置为紫色'不会改变底层对象。它只是将column指向其他内容。

  2. 但是,设置column.a确实有效,因为列指向与嵌套列相同的对象,因此在一个对象上设置属性将反映在另一个上。