字符串

// example 1
var a = {}, b = '123', c = 123;
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); // =>c 因为:a["123"] <=> a[123]

// example 2
var a = {}, b = Symbol('123'), c = Symbol('123');
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); // =>b symbol 是 ES6 中新增的数据类型 typeof Symbol('123')==="symbol" 它创建出来的值是唯一值 Symbol('123) ===Symbol('123'):False

// example 3
var a = {}, b = { key: '123' }, c = { key: '456' };
a[b] = 'b'; --------->  a[b]='b' => a["[object Object]"]='b'
a[c] = 'c'; --------->  a[c]='c' => a["[object Object]"]='c'
console.log(a[b]); // =>c 
/**
1、对象的属性名不能是一个对象(遇到对象属性名,会默认转换成字符串)
obj={} arr[12,32] obj[arr]='你好' obj=>{"12,32":"你好"}
2、普通对象.toString 调用的是 Object.prototype 上的方法(这个方法是用来检测数据类型的)
obj={} obj.tiString() => "[object Object]"
**/
原文地址:https://www.cnblogs.com/HYTing/p/12612401.html