变量作为表达式属性定义对象

var a = 'b';

var obj = {};

obj[a] = 1;

那么问题来了console.log(obj.b)为什么会打印1,obj的属性a为什么会访问到外部的变量a

阅读 1.8k
3 个回答

因为var a = 'b';
所以obj[a]等同于obj['b'],所以就是onj['b'] = 1,所以obj.b = obj['b'] = 1

js中对象想获得属性有两种方式,一个是obj.a,一个是obj[a];前者的a表示对象中的key,而[]的写法表示a是一个变量,你如果写成obj['a'],这时候a就成了一个字符串,所以也会被当成obj对象中的一个key

[]会先计算里面的值,得到'b'。

然后obj['b'] = 1;

所以当你调用obj.b的时候,返回1

不然你以为打印出什么?

var a = 'b';
var obj = {};

obj[a] = 1;  ===> obj['b'] = 1;

obj['b'] ===> obj.b;

这样不一样?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题