Skip to content

属性名表达式 ​

本节目标:理解“属性名表达式”的核心思路,并能把它用于实际开发或面试表达。

定义对象的属性,有两种方法。
一、直接用标识符作为属性名,obj.foo = true;
二、是用表达式作为属性名,表达式要放在方括号之内。obj['a' + 'bc'] = 123;
用字面量方式定义对象,ES5中只能标识符定义属性,ES6允许用表达式定义属性名。
var obj = {  foo: true,  abc: 123};
let propKey = 'foo';
let obj = {  [propKey]: true,  ['a' + 'bc']: 123};
下面是另一个例子。
let lastWord = 'last word';
const a = {  'first word': 'hello',  [lastWord]: 'world'};
a['first word'] // "hello"a[lastWord] // "world"a['last word'] // "world"
**表达式还可以用于定义方法名**
let obj = {  ['h' + 'ello']() {    return 'hi';  }};
obj.hello() // hi
**注意**
一、属性名表达式与简洁表示法,不能同时使用,会报错。
// 报错const foo = 'bar';const bar = 'abc';const baz = { [foo] };
// 正确const foo = 'bar';const baz = { [foo]: 'abc'};
二、属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串[object Object],这一点要特别小心。
const keyA = {a: 1};const keyB = {b: 2};
const myObject = {  [keyA]: 'valueA',  [keyB]: 'valueB'};
myObject // Object {[object Object]: "valueB"}
上面代码中,[keyA]和[keyB]得到的都是[object Object],所以[keyB]会把[keyA]覆盖掉,而myObject最后只有一个[object Object]属性。

本站总访问 — 次