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 有什么不同?
全部!
答案 0 :(得分:3)
它不是一个数组而是一个对象,但第一个问题实际上很有趣。
使用[]
符号获取对象属性意味着您需要传递一个键 - 它可能看起来像一个数组文字,但它不是。
你在方括号中加的是一个陈述。
例如,您可以执行以下操作:arr[ condition ? 'first' : 'second' ]
- 解析语句并将其返回值作为键传递。
在arr['first', 'second']
中,内部语句可以读作('first', 'second')
,返回second
,因为在JS中,由许多表达式组成的语句返回最后一个语句的值,例如{ {1}}返回(x=2, 4)
。
它还对4
与object.child
有所了解。在第一个示例中,您需要使用实际密钥,而在第二个示例中,您需要传递一个语句;在这种情况下,语句计算为字符串,但它可以是变量名,或任何可以评估为可用作键(字符串或数字)的东西。
答案 1 :(得分:3)
在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