level 1
var attr = 'test';
var arr = [];
arr.push({[attr] : 1});
//arr.push({['test','a'] : [1,2]})//报错;
console.log(arr);
这个[attr]:1 这个方括号是结构赋值吗
2020年09月02日 11点09分
1
level 13
建议重学对象表达式。
你没有发觉 {[attr]:1} 这个格式跟 object[attr]=1 是对应的吗?
在对象表达式中以中括号书写属性名属于动态属性名。
{ [ 表达式(属性名字符串) ] : 表达式(数据) }
属性名中括号内的表达式最终会被转换成字符串作为属性名。
var attr = "test"; //声明 attr 并赋值 “test”
var arr = []; //声明 arr 并赋值空数组
arr.push({[attr]:1});
拆分:
{[attr]:1} //生成一个对象,其中以表达式“attr”为键名的属性的值为 1
表达式“attr”:变量 attr = "test",以字符串 "test" 作为键名并赋值 1
得到 {"test":1} ,作为 arr.push 的参数
arr.push( {"test":1} ); //向数组 arr 推入生成的对象
console.log(arr) //在控制台打印数组 arr
结果:[ { test : 1 } ]
{["test","a"]:[1,2]} 会报错是因为解释器认为 ["test","a"] 是一个动态键名,但是 "test","a" 不是有效的表达式,因此报错。
2020年09月02日 15点09分
10