任何提供数组(列表、向量、元组等)的编程语言都必须决定它们是否具有引用或值语义,通常/显而易见的选择是可变数组的引用语义和不可变数组的值语义。
提供可变数组的 JavaScript 似乎选择了引用语义,例如给定
var a = [1, 2, 3]
var b = [1, 2, 3]
然后a != b
,正如预期的那样,因为尽管它们具有相同的内容,但它们是不同的数组。
但是,当您将它们用作对象中的键时,图片会发生变化;如果您设置obj[a]
为一个值,则obj[b]
获得相同的值。此外,如果您更改数组的内容,这仍然是正确的;至少当我在 Rhino 中测试它时,它的行为就好像解释器在每次查找时递归地比较提供和存储的键数组的全部内容,并检查如果其中一个数组被创建时会发生的无限循环指向自己。
这是所有实现中的预期/指定行为吗?
它是否也适用于用作键的对象?
有没有办法获得其他行为,即使用数组作为具有引用语义的键来查找值?