【问题标题】:Confused by object property output对对象属性输出感到困惑
【发布时间】:2015-06-30 21:59:55
【问题描述】:

我对编程和学习 JavaScript 以及试图理解对象和属性名称还很陌生。在以下示例中(来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors),课程说明此代码(如下)输出“value”,因为 foo 和 bar 都转换为相同的字符串。我知道属性必须是字符串,并且数字会自动输入为字符串,但我不明白为什么 foo 和 bar 都解析为“值”。对我来说,由于 var bar = 2,最后一行代码似乎应该解析为“2”。我错过了什么?谢谢!

var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'value';
console.log(object[bar]);

【问题讨论】:

  • 键不能是对象。发生的情况是对象将被字符串化,最终得到{'[object Object]': 'value'}
  • @elclanrs:嗯,对象可以是键,正如我们在上面看到的,但这不是我们所需要的,因为所有数据对象都会产生相同的键。
  • 你可能想要object[foo.unique_prop]
  • 试试console.log(foo.toString());console.log(bar.toString()); 这会给你同样的字符串'[object Object]'。所以object{'[object Object]': 'value'} 将是结果。
  • 值得注意的是,在 ECMA-262 ed 6 中有 computed property namesmap 允许对象作为键的对象。

标签: javascript object


【解决方案1】:

我了解属性必须是字符串,而数字将 自动输入为字符串

是的,键必须是字符串。如果不是,那么您传递的任何内容都将转换为字符串,包括对象。您可以阅读您所写的内容:

object[foo.toString()] = 'value'

字符串化的对象为您提供'[object Object]'。因此,实际上,您将添加和检索相同的密钥:

{'[object Object]': 'value'}

【讨论】:

  • 对不起,我没有关注。我什至问了几个用其他语言编写脚本的同事,他们也不关注。当我在 Codepen 中输入代码时,没有任何反应。首先,当我看最后一行时,我不明白为什么 (object[bar]) 不能解析为 (object['2'])。其次,我不明白第二行和第三行是如何连接的全部。第二行是在谈论 foo。第三行是在谈论 bar。第三行是动作发生的地方,对吧?
  • @HollyFortenberry:两个不同的对象解析为 same 字符串:'[object Object]'。所以它是同一个键。看? jsfiddle.net/Lhwm4g0f。为什么您希望 object[bar] 解析为 object['2']?这就是混乱的地方;它解析为object['[object Object]']
  • 我认为它解析为 object['2'] 的原因是因为我在第一行中看到 var bar 被分配给 {unique_prop: 2}。所以那个数字 2 应该被转换成一个字符串,'2'。如果我错过了一些非常基本的东西,我很抱歉。我对此很陌生。我觉得自己很笨。
  • 但是那个数字 2 是一个键的值。钥匙怎么了?发生的是 whole 对象被字符串化,而不仅仅是它的一些随机属性。如果你要做var bar = 2; object[bar] = 'value',那么你会得到object === {'2': 'value'}
  • 谢谢 elclanrs。我检查了 jsfiddle,我看到你在第三行写为 console.log(object);。我很困惑为什么 console.log 括号内的对象从条形变为对象。我认为这是我不理解的症结所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 2018-03-05
  • 1970-01-01
相关资源
最近更新 更多