/* 输出下面代码 看运行结果 */
// example 1
var a = {},
b = 123,
c = '123';
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); // c
/* 解析: let obj={'100':100,100:'哈哈'} 结果为{100:哈哈} 因为对象当中属性名是作为字符串解析的 当 后面有相同的属性名时 会覆盖 */
// example 2
var a = {},
b = Symbol(123),
c = Symbol(123);
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); // "b"
/* 解析 : 可能 很多人会有疑惑 因为 symbol 是惟一的 symbol(123)=== symbol(123) 返回的是false */
var a = {},
b = { key: 123 },
c = { key: 456 };
a[b] = 'b';
a[c] = 'c';
console.log(a[b]); //c
/* 解析
1. 对象的属性名不能使一个对象(遇到对象的属性名会默认转换为字符串)
2. obj={} arr=[12,13] obj[arr]='lesson' obj==>{'12,23':'lesson'}
3. 普通对象.toString() 调用的方法是Object.prototype上的方法 (Object.toString.call()) 用来检测数据类型的
obj={} 调用toString=>["Object","Object"] 因此会覆盖
*/
网友评论