JavaScript:取消指向对象的变量会取消变量而不是对象?

标签 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

最佳答案

看看这里:Evaluation Strategy - Call by Sharing 还有这个SO question

本质上可以归结为:

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

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

关于JavaScript:取消指向对象的变量会取消变量而不是对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37978765/

相关文章:

javascript - 如何为移动设备制作一个无论页面缩放如何都保持相同大小的 CSS 菜单?

javascript - AngularJS 创建全局键盘快捷键的方法是什么?

JavaScript:获取发送者元素

javascript - 使用纯 javascript 查找 #wrapper 中是否有 img

excel - Python - XlsxWriter : Referring to columns by column name, 不是列字母(硬编码与动态变量)

javascript - javascript 中的变量引用遇到问题

javascript - 如何使此函数不返回负的日期差?

javascript - 在 JS 对象中搜索值

jquery - 为什么变量不会传递到 jQuery.each 中?

javascript - JavaScript 上的火星到漫游者。我需要能够向流动站发出一系列命令并按顺序执行它们。