输出以下代码运行结果
// example 1
var a={}, b='123', c=123;
a[b]='b';
a[c]='c';
console.log(a[b]);
// example 2
var a={}, b=Symbol('123'), c=Symbol('123');
a[b]='b';
a[c]='c';
console.log(a[b]);
// example 3
var a={}, b={key:'123'}, c={key:'456'};
a[b]='b';
a[c]='c';
console.log(a[b]);
解答:
这题考察的是对象的键名的转换。
对象的键名只能是字符串和 Symbol 类型。
其他类型的键名会被转换成字符串类型。
对象转字符串默认会调用 toString 方法。
// example 1
var a={}, b='123', c=123;
a[b]='b';
a[c]='c';
// 输出 c
console.log(a[b]);
c 的键名会被转换成字符串'123',这里会把 b 覆盖掉。
// example 2
var a={}, b=Symbol('123'), c=Symbol('123');
a[b]='b';
a[c]='c';
// 输出 b
console.log(a[b]);
b 是 Symbol 类型,不需要转换。
c 是 Symbol 类型,不需要转换。任何一个 Symbol 类型的值都是不相等的,所以不会覆盖掉 b。
// example 3
var a={}, b={key:'123'}, c={key:'456'};
a[b]='b';
a[c]='c';
// 输出 c
console.log(a[b]);
b 不是字符串也不是 Symbol 类型,需要转换成字符串。
对象类型会调用 toString 方法转换成字符串 [object Object]。
c 不是字符串也不是 Symbol 类型,需要转换成字符串。
对象类型会调用 toString 方法转换成字符串 [object Object]。这里会把 b 覆盖掉。
求点赞 求关注~作者:木易杨
博客:https://github.com/yygmind/blog
网友评论