可以说 "JavaScript 对象是变量的容器",但是,我们通常认为 "JavaScript 对象是键值对的容器"。
键值对通常写法为 name : value (键与值以冒号分割),键值对在 JavaScript 对象通常称为 对象属性。、
1 var obj={a:1,b:2}; 2 // a是obj的key 3 // 1是obj的key属性a的value 4 5 // 直接定义对象obj的属性a的值是10 6 obj.a=10; 7 console.log(obj.a); 8 9 // 现在给obj对象创建一个新属性c,并且设置这个新属性的值是20 10 obj.c=20; 11 console.log(obj.c);
对象属性有两种写法,一种是点语法,另一种是[]的写法。
1 obj.a //点语法的属性是不加双引号 2 obj["a"] // key的写法,必须有双引号
//为什么key的写法必须有双引号,在key这种写法时,要求属性名必须时字符型(或者symbol)。
1 var a="ab"; 2 obj[a]=30; 3 // 这里的a是变量,可以理解为将"ab"的字符串作为了obj的属性名
1 var obj={a:1,b:2,o:3}; 2 var o="a"; 3 console.log(obj[o]) ;//1 4 console.log(obj.o);//如果对象上没有该属性时,结果是undefined 5 6 var o="a"; 7 console.log(obj[o]);//这里的o没有加双引号,因此是变量 1 8 console.log(obj["o"]);//3 这里获取了obj的o属性 9 console.log(obj.o);//使用点语法时不能使用变量,所以不需要加双引号,默认为是o属性 3
当使用对象[变量] 如果变量值不是字符型,会隐式转换为字符型,并且将这个字符串作为该对象的属性名。
1 var n=9; 2 obj[n]=100;//如果变量的值不是字符,会隐式转换为字符,会将n的值转换为字符9设置为属性 3 4 var m=true; 5 obj[m]=10;//这里会将变量值不是字符串的隐式全部转为字符串 6 console.log(obj.true); 7 8 9 var n; 10 var m; 11 obj[n]=10;//n的值是undefined,会自动隐式转换为字符串undefined 12 // 变量的值作为对象的属性名 13 console.log(obj[m]); 14 console.log(obj["undefined"]); 15 obj["undefined"] 16 console.log(n);
任何对象强转为字符串后,都会变为"[object Object]"。
1 var o={a:1}; 2 var o1={b:2}; 3 var o2={}; 4 5 o2[o]=10; 6 o2[o1]=20; 7 console.log(o2[o]); 8 9 o2[o]=10; 10 console.log(String(o));//"[object Object]"