javascript - 如何在 JavaScript 中使用现有变量?

标签 javascript

var list = [{name: 'foo'}, {name: 'bar'}];
var x = list[0];
x.name = 'baz'; // Changes name in list[0]
x = {name: 'baz'} // Doesn't change name in list[0] - PROBLEM

看起来第 4 行正在创建一个新变量。如何告诉 JavaScript 使用在第 2 行中创建的现有变量 x?

最佳答案

变量 x 包含对对象的引用。

  • x.name = ... 更改 x 引用的特定对象的属性。

  • x = { ... } 更改 x 引用的对象

这是设置:

x ==> { old object } <== list[0]

当您执行 x = { .. } 时,会发生以下情况:

x ==> { brand new object } 
      {    old object    } <== list[0]

但您希望它执行此操作(注意:这永远不会发生):

x ==> { brand new object } <== list[0]
      {    old object    }  // referred to by no one! (will be garbage collected on the next sweep)

您似乎希望语句 x = { ... } 完全替换 x 以前用 a 引用的对象新对象。你不能; JavaScript 没有任何机制允许这种替换。对象不能像我的第二个例子那样“被替换”。您需要手动更改每个引用。

相反,如果您想更改 list 的第一个元素,则需要直接在数组上进行替换。即,您必须在更改 x 之后执行 list[0] = { ... }list[0] = x >.

关于javascript - 如何在 JavaScript 中使用现有变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18363557/

相关文章:

javascript - 将自定义 html 添加到 lightbox2

javascript - 图片加载后如何返回

JavaScript 在数组中查找缺失的数字

javascript - 如何在日历中仅显示当前日期?

javascript - 在for循环中使用append()的问题

javascript - 字幕文本 - 获取屏幕边界外的文本长度(以像素为单位)

c# - asp.net 中用户控件的多个实例

javascript - 深度可观察值和 foreach 模板

javascript - 使用 window.location.assign 加载页面后调用 javascript 函数

javascript - react 待办事项列表过滤器