javascript Object(对象数据类型:属性值的两种方式)

133 阅读1分钟

对象的属性名不能是引用类型

中括号里面的值加不加双引号和单引号和 什么都不加的区别
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数据类型