第 76 题:说出以下代码运行结果
// 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]);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 第 77 题:旋转数组算法题
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
看完流下了没有技术的泪
输出以下代码运行结果
再加一题
// example 4
var a={}, b=function(){return 1} c=function(){return 2};
a[b]='b';
a[c]='c';
console.log(a[b]);
你这代码书写有问题,少了逗号啊!function也会调用toString方法,所以结果是b
喜欢这种 看着简单却做不对的题目TT
对象类型应该是调用
String()
方法转为字符串吧。javascript 普通对象的key都是字符串。
所以:
1,a[c]会先将c转换为字符串,然后再赋值。
2,symbol也可以作为普通对象的key,而且这两个symbol不是相等的。
3,先将对像转换为字符串,然后赋值,所以第二个覆盖了第一个,如果给对象增加一个toString()方法那就会不一样了。
前面说的很清楚了,除了Symbol,如果想要不被覆盖 可以使用ES6提供的Map
我是知道了这个题考察的 对象 键名转换,我知道键名是string,但是第三个我想成了 stringify ,toString就比较容易理解了
我是这样的,看完解析,才恍然觉得我好像以前记过这个啊!!
牛皮~ 看起来又是不会的知识
Got it!
这题考察的是对象的键名的转换。