为了账号安全,请及时绑定邮箱和手机立即绑定

js面试题,求解析。越详细越好

js面试题,求解析。越详细越好

FFIVE 2018-08-02 19:12:51
求解析,a.b 和 a[b]都是获取对象属性的写法。但差异是:a[b]的b只能是字符串。那下面的代码怎么解析呢 ,输出值为什么是345,345,333?var a = {};var b = {key: 'b'};var c = {key: 'c'};var d = [3,5,6];a[b] = 123;a[c] = 345;a[d] = 333;console.log(a[b]); console.log(a[c]); console.log(a[d]);
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

对象的key值是一个字符串,b与c都是一个对象,将他们作为a的key值会先转化为字符串,对象转化为字符串后是[object Object],所以a[b]=123就是a['[object Object]']=123,执行a[c] = 345;的时候会把a['[object Object]']重新赋值为345,所以打印a[c]与a[d]就是对a['[object Object]']的取值,结果都是345

数组d转化为字符串的结果是3,5,6,所以a[d] = 333;就是a['3,5,6'] = 333;,取值同理就是取a['3,5,6']的值

补充

es6中可作为对象属性的Symbol类型


查看完整回答
反对 回复 2018-08-05
?
茅侃侃

TA贡献1842条经验 获得超21个赞

Object内置toString 和 valueOf 方法;
这种情况a[b] = 123 会默认调用对象的toString().
a[b] = 123就是a['[object Object]'] = 123
a[c]里面的对象c通向会调用toString() 也是a['[object Object]'] = 345;
而数组的toStirng() = '[object Array]';
最终a应该是{'[object Object]':345,'[object Array]':333};
ps:默认调用toString()是什么情况我要先查查先。
错了。。。。应该是a {'[object Object]':345,'3,5,6':333};

查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 917 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信