问题: 有时候,我们需要将一个变量的值作为一个对象的属性名,这时候使用 obj. 这种形式就不行了,如下:
let obj = {};
let str = "key";
// 这里我们想根据str的值来作为obj的属性名,即 obj.key
// 如下,如果直接使用obj.str肯定是不行的,这样直接就是给obj对象一个str的属性名了
obj.str = '这个属性名是str';
console.log(obj.str) // 这个属性名是str
// 正确方法有两个,都需要使用 [],一个是对对象使用[]赋值
obj[str]= '这个属性名是key了';
// 另外就是在创建对象时,使用[] 设置属性名
obj = {
[str]:"这个属性名也是key"
}
还有一种比较常见的情况是对象里面的属性名是数字时,这时候直接使用打点的形式是会报错的,如下图:
这时候就需要使用中括号了,如下:
扩展: 如果要访问 对象 中 a 位置上的值,我们需要使用 . 操作符或者 [] 操作符。.a 语法通
常被称为“属性访问”,[“a”] 语法通常被称为“键访问”。实际上它们访问的是同一个位置;这两种语法的主要区别在于 . 操作符要求属性名满足标识符的命名规范,而 ["…"] 语法可以接受任意 UTF-8/Unicode 字符串作为属性名。此外,由于 ["…"] 语法使用字符串来访问属性,所以可以在程序中构造这个字符串(即通过一个变量取值,或者也可以进行操作)。