- 对象的键名只能是字符串和 Symbol 类型。
- 其余类型的键名会被转换成字符串类型。
- 对象转字符串默认会调用 toString 办法。
当键名是非字符串或 Symbol 时,会先转换成字符串再进行赋值
var obj={}, a='123', b=123;
obj[a]='a';
obj[b]='b';
console.log(obj[a]) //b
当执行 obj[a] = ‘a’ 时,a 是 string,间接赋值
当执行 obj[b] = ‘b’ 时,b 是 number,会调用 toString 转换成字符串 ‘123’,笼罩掉 a
当键名是 Symbol 时,因为 Symbol 的唯一性,因而无奈笼罩
var obj={}, a= Symbol('123'), b= Symbol('123');
obj[a]='a';
obj[b]='b';
console.log(obj[a]) //a
当执行 obj[a] = ‘a’ 时,a 是 Symbol,间接赋值
当执行 obj[b] = ‘b’ 时,因为 a 不等于 b,间接赋值,
当 a,b 是 object 时,也会调用 toString,转换成字符串 [object Object]
var obj={}, a= {}, b= {};
obj[a]='a';
obj[b]='b';
console.log(obj[a]) //b
当执行 obj[a]=’a’ ; a 是 object,会被转换成字符串 [object Object]
当执行 obj[b]=’b’ ; b 是 object,会被转换成字符串 [object Object],笼罩掉 a