Javascript对象属性存在奇怪的平等问题

mga*_*mer 2 javascript object

为什么在执行该代码片段之后:

var a = {};
var b = {};

var g = {};
g[a] = "aa";
g[b] = "dd";
Run Code Online (Sandbox Code Playgroud)

g [a]的值是"dd"?

a == b是假的,那么这里发生了什么?

Mat*_*all 7

JavaScript对象键只能是字符串.存储时g[a] = 'aa',使用toString()方法将a转换为字符串,1因此您实际存储'aa'g[a.toString()].

在这种情况下,a.toString()'[object Object]',等于b.toString().

为了使它真的很明显,你问题中的代码等同于:

var g = {};
g['[object Object]'] = 'aa';
g['[object Object]'] = 'dd';
Run Code Online (Sandbox Code Playgroud)

故事的道德:只是不要尝试使用除字符串之外的任何东西作为属性名称.


1来源:MDC:JavaScript成员运营商 - 财产名称