Javascript 为什么两个数组是;“相等”;对于getter,当它们具有相同的值时?

Javascript 为什么两个数组是;“相等”;对于getter,当它们具有相同的值时?,javascript,Javascript,我想为我的对象提供一个定制的getter和setter方法,它包装Map。 不知何故,当我使用数组作为键getter时,当它们具有相同的值时,它们的行为是相等的。尽管它们是两个不同的参考。(在FF和铬中测试) 正如你所看到的,如果你传递给getter的是我所期望的相同的引用,这并不重要。它只检查它是否有相同的值,这对我来说有点奇怪。你能解释一下它为什么会这样吗 提前谢谢 编辑 当您直接访问映射时,它将返回预期结果。JavaScript对象上的属性名称是字符串,当您使用字符串以外的名称时,它首先

我想为我的对象提供一个定制的getter和setter方法,它包装
Map
。 不知何故,当我使用数组作为键
getter
时,当它们具有相同的值时,它们的行为是相等的。尽管它们是两个不同的参考。(在FF和铬中测试)

正如你所看到的,如果你传递给getter的是我所期望的相同的引用,这并不重要。它只检查它是否有相同的值,这对我来说有点奇怪。你能解释一下它为什么会这样吗

提前谢谢

编辑
当您直接访问映射时,它将返回预期结果。

JavaScript对象上的属性名称是字符串,当您使用字符串以外的名称时,它首先转换为字符串

arr1
arr2
都是包含
[1]
内容的数组,当您
toString()
这样做时,您将得到
“1”


arr3
中的数组同样会得到
“2”
。因此,
arr1
arr2
映射到同一个属性,名称为
“1”
,而
arr3
映射到另一个属性。

JavaScript对象上的属性名称是字符串,当您使用字符串以外的名称作为名称时,它首先转换为字符串

arr1
arr2
都是包含
[1]
内容的数组,当您
toString()
这样做时,您将得到
“1”


arr3
中的数组同样会得到
“2”
。因此,
arr1
arr2
映射到相同的属性,名称为
“1”
,而
arr3
映射到不同的属性。

对象属性名称只能是字符串值。调用
Object.defineProperty()
时,它会将
prop
值强制为字符串(在这种情况下,
arr1
arr2
都强制为相同的值

当您尝试使用
obj[arr1]
obj[arr2]
访问对象属性时,也会发生同样的情况

如果希望对象公开映射,请为其提供访问该映射的成员。对象属性的工作方式与您尝试使用它们的方式不同:

var Cons = function (){
  this.data = new Map();

  this.get = function (key) { return this.data.get(key); };
  this.set = function (key, value) { this.data.set(key, value); };
};


// further down...

obj.set(arr1, 1);

对象属性名称只能是字符串值。当调用
Object.defineProperty()
时,它会将
prop
值强制为字符串(在这种情况下,
arr1
arr2
都强制为相同的值

当您尝试使用
obj[arr1]
obj[arr2]
访问对象属性时,也会发生同样的情况

如果希望对象公开映射,请为其提供访问该映射的成员。对象属性的工作方式与您尝试使用它们的方式不同:

var Cons = function (){
  this.data = new Map();

  this.get = function (key) { return this.data.get(key); };
  this.set = function (key, value) { this.data.set(key, value); };
};


// further down...

obj.set(arr1, 1);

它可能会将键转换为字符串并使用
'1'
。它可能会将键转换为字符串并使用
'1'
。这就是原因。奇怪的是,当getter中的I
console.log(prop)
显示数组时会发生这种情况,但在这种情况下它应该记录字符串。这并不奇怪。您的
console.log()
行正在访问
get
set
闭包范围内的实际
prop
值,该闭包最初被传递到
initialiseGetterAndSetter()
。是的,这就是原因。奇怪的部分发生在I
console.log(prop)中
在getter中,它显示数组,但在这种情况下它应该记录字符串。这并不奇怪。您的
console.log()
行正在访问实际的
prop
值,该值位于
get
set
闭包的范围内,该闭包最初被传递到
initialiseGetterAndSetter()
中。