Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用对象作为键总是导致最后一次赋值的值_Javascript - Fatal编程技术网

Javascript 使用对象作为键总是导致最后一次赋值的值

Javascript 使用对象作为键总是导致最后一次赋值的值,javascript,Javascript,下面是代码片段- var a={}; b={ 键:“b” }; c={ 键:“c” }; a[b]=123;//在这里,我对对象如何被用作键感到困惑 a[c]=456; console.log(a[b]);//产量为456 console.log(a[c]);//输出为456对象属性名称为字符串 任何试图用作属性名的表达式都会隐式转换为字符串 任何基本对象都将有一个toString()方法,该方法返回“[object object]”(因此两个不同的对象将转换为相同的字符串并表示相同的属性)

下面是代码片段-

var a={};
b={
键:“b”
};
c={
键:“c”
};
a[b]=123;//在这里,我对对象如何被用作键感到困惑
a[c]=456;
console.log(a[b]);//产量为456

console.log(a[c]);//输出为456
对象属性名称为字符串

任何试图用作属性名的表达式都会隐式转换为字符串

任何基本对象都将有一个
toString()
方法,该方法返回
“[object object]”
(因此两个不同的对象将转换为相同的字符串并表示相同的属性)

var a={};
var b={key:“b”};
var c={key:“c”};
a[b]=123;
a[c]=456;
console.log(a[b]);//产量为456
var property_name=b.toString();
日志(“属性名称:”,属性名称);
log(“a[property\u name]:”,a[property\u name]);

控制台日志(“a:,a”)JavaScript中的对象键为。因此,正如@Sumurai8所指出的,真正发生的是:

var a = {}; // Create a map/hash

b = {key : "b"};
c = {key : "c"};

a[b] = 123; // b.toString() gives `[object Object]`
// Now, the map has: { "[object Object]": 123 }
a[c] = 456; // c.toString() gives `[object Object]`
// Now, the map has: { "[object Object]": 456 }

console.log(a[b]); // b.toString() gives `[object Object]`

非常确定它正在做类似于
b.toString()
c.toString()
的事情,你能把它转换成一个可运行的代码段吗?
console.log(a)
显示实际使用的键值。(这也是为什么这不是一个好主意的开始。)Sumurai8是正确的。对象内的键将被强制转换为字符串。因此,当您尝试使用对象作为键时,将调用其.toString()方法,返回
[object object]
。由于所有基本对象都会这样做,a[b]将该值设置为123,然后使用[c]用新值456覆盖刚刚创建的键。因此,当您控制台.log(a[b])时,您将得到键
[object object]
下的最后一个值,即456。您可以使用
a[b.key]
a[c.key]
,它将生成
{b:123,c:456}