【问题标题】:JavaScript JSON object with square brackets and quote带有方括号和引号的 JavaScript JSON 对象
【发布时间】:2015-01-19 08:54:49
【问题描述】:
var arr = { first: 123, second: 456 };

console.log(arr['first']);            // 123
console.log(arr['second']);           // 456
console.log(arr.first);               // 123
console.log(arr['first', 'second']);  // 456

问题 1:为什么 arr['first', 'second'] 会得到最后一个元素?

问题 2:['child'].child 有什么不同?


谢谢!

【问题讨论】:

标签: javascript


【解决方案1】:

在 JS 中,对象是键值对的集合(如果需要,可以使用映射或字典)。数组只是另一种类型的对象。但是,您的示例具有一个普通对象。

正如我之前所说,对象有键,用于提供对方法和属性的访问。

var o = { 
  x: 12, 
  y: function () { console.log(this.x); } 
};

o.y(); // 12

您可以通过 2 种表示法访问对象的成员:

  • 点符号:o.x, o,y
  • 括号表示法:o['x'], o['y']

注意,在第二种方法中,您必须提供一个字符串,这意味着 var name = 'x'; o[name] 会起作用,而o[x] 不会。

这也适用于数组:

var arr = ['a', 'b', 'c'];
arr[0] // 'a'
arr['0'] // 'a'
Object.keys(arr) // ['0', '1', '2']

但是,你不能这样做arr.0

现在,关于您的问题: arr['first', 'second']arr['second'] 等效,因为您使用逗号运算符从左到右计算每个表达式,并返回最右边的值。 例如:1, alert(0), 5 给你5

【讨论】:

    【解决方案2】:

    不是数组而是对象,但第一个问题其实很有趣。

    使用[] 表示法获取对象属性意味着您需要传递一个键——它可能看起来像一个数组字面量,但实际上不是。

    你放在方括号里的是一个声明。

    例如,您可以执行以下操作:arr[ condition ? 'first' : 'second' ] - 解析语句并将其返回值作为键传递。

    arr['first', 'second']中,内部语句可以读作('first', 'second'),它返回second,因为在JS中,由许多表达式组成的语句返回最后一个的值,例如(x=2, 4)返回4 .

    它还揭示了 object.childobject['child'] 的对比。在第一个示例中,您需要使用实际密钥,而在第二个示例中,您需要传递一个语句;在这种情况下,该语句的计算结果为字符串,但它可以是一个变量名,或者任何可以计算为可以用作键(字符串或数字)的东西的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2017-12-01
      • 2015-12-07
      • 1970-01-01
      • 2013-10-11
      相关资源
      最近更新 更多