对象的属性名不能是引用类型
中括号里面的值加不加双引号和单引号和 什么都不加的区别
let n = 100;
let obj = {};
// 基于 对象[属性值] 的方式操作,需要保证属性名是一个值(字符串/数字/布尔等都可以),如果不是值而是一个变量
// 它会把变量存储 的值作为对象的属性名进行操作
// 基于 对象.属性名 的方式操作,属性名就是点后面的
obj.n = 200; // => {n:200} n是属性名 (数据格式是字符串)
obj['n'] = 200; // => {n:200} n是属性名 (数据格式是字符串)
obj[n] = 200; // => {100:200} => obj[100] = 200 n本身是一个变量,(n和'n'的区别:前者是一个变量,后者是一个字符串的值),它代表
的是所存储的值100(是一个数字格式)
{100:200}
console.log(obj);
obj[true] = 300; // => {true: 300}
obj[undefined] = 400; // => {undefined: 400}
let obj = {
1: 100
}
obj[1] = 100;
obj.1 // 就会报错
基于点的操作方式有局限性,属性名不能是数字 ,只能用[]
对于数字属性值,写数字和字符串都可以
obj[1] = 100;
obj['1'] = 100; //其他非字符串格式的写为字符串格式没有区别
let n = { x: 100};
let m = [100,200];
let obj = {};
obj[n] = 'jiujiu';
console.log(obj); // => obj[{x:100}] 但是对象不能作为属性名,需要把属性名转为字符串 {[object Object]: 'jiujiu'}
obj[m] = 'jiujiu'; // => obj[[100,200]] => {100,200: jiujiu}
如果非要属性名为对象,只能基于es6中的Map数据类型