数组引用与值语义

rwa*_*ace 4 javascript arrays reference key

任何提供数组(列表,向量,元组等)的编程语言都必须决定它们是否具有引用或值语义,通常/明显的选择是可变数组的引用语义和不可变数组的值语义.

提供可变数组的JavaScript似乎选择了参考语义,例如给定

var a = [1, 2, 3]
var b = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

然后a != b,正如预期的那样,虽然它们具有相同的内容,但它们是不同的数组.

但是,当您将它们用作对象中的键时,图像会发生变化; 如果设置obj[a]为值,则obj[b]获取相同的值.此外,如果更改数组的内容,这仍然是正确的; 至少当我在Rhino中测试它时,它的行为似乎是解释器在每次查找时递归地比较提供和存储的键数组的全部内容,并检查如果其中一个数组被制作就会发生无限循环指出自己.

这是所有实现中的预期/指定行为吗?

它是否也适用于用作键的对象?

有没有办法获得其他行为,即使用数组作为具有引用语义的键来查找值?

Ja͢*_*͢ck 8

当数组用作属性名称时,它们将转换为字符串:

[1,2,3].toString() == '1,2,3'
Run Code Online (Sandbox Code Playgroud)

一旦转换为字符串值,具有相同内容的数组将映射到同一属性.

要回答上一个问题,您不能使用对象来引用属性名称(键),只有同一个对象映射到同一属性(1:1映射).