【问题标题】:setting value is changing key name设置值正在更改键名
【发布时间】:2011-06-14 16:14:31
【问题描述】:
var test = {
    one: {},
    two: {},
};
test['two'].parent = test['one'];

我想要测试的内容:

test = {
   one: {},
   two: { parent: {}, }

它实际上有什么:

 test = {
    parent: {},
    two: { parent: {}, }

为什么 test.one 会变成 test.parent?

我希望 test.two.parent 持有对 test.one 的引用。我该怎么做?

【问题讨论】:

  • 是什么让您认为这种情况正在发生?不是。

标签: javascript object key overwrite


【解决方案1】:

为什么 test.one 会变成 test.parent?

它没有。生成的结构是:

{
one: {},
two: { parent: {} }
}

parent 引用的对象与one 引用的对象相同。

如果你这样做:

test.one.cheese = "crackers";

...下面的结果将是“饼干”

alert(test.two.parent.cheese); // "crackers"

示例: http://jsfiddle.net/g5chF/

【讨论】:

  • 对不起,你是对的,我的问题出在调试器中,它显然有一个错误,显示了上面的输出
【解决方案2】:

你用的是什么浏览器?它可能会有所作为。

我在 Firefox 上的 Firebug 测试中收到了预期的结果,但是我不建议混合和匹配属性访问语法(语法?语法?)。

代替:

test['two'].parent = test['one'];

我愿意:

test['two']['parent'] = test['one'];

【讨论】:

  • 完全没有必要;访问或定义属性的任何一种方式都可以。
  • @Pointy,我提到原来的工作,其余的建议保持一致。
  • 好吧,我想这是一个很好的观点。 test.two.parent = test.one 也可以在这里工作。
【解决方案3】:

您对该声明的作用的声明:

test['two'].parent = test['one'];

不正确。代码已经做了你想做的事:它向test.two 添加了一个“父”属性,这样test.two.parent 就会有一个空对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2014-01-16
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2015-09-10
    相关资源
    最近更新 更多