var obj = {};
var o ={a:1};
obj[o]=20;
var o1={a:3};
console.log(obj[o1]);//输出20
//o是对象,被带入时转换为字符串[object Object],所以{[object Object]:20},o1也是对象,转换为字符串也是[object Object],所以输出20;
如果
console.log(obj.o1);//输出undefined
//o1是变量,被带入时转换为字符串[object Object];
//这里的o1是字符,没有o1的属性
总结:
在对象中 以键值对形式存储,键必须是属性名,可以直接给字符串,也可以以变量形式给入,不管变量形式是什么,都会隐式转换成字符
使用.语法时,不能是变量,必须是确定的字符,如果要使用变量,必须用[]
遍历对象(for in)
var obj={
a:1,
b:2,
c:3,
d:4,
e:undefined//有undefined的值
}
遍历对象:要把对象某一个值循环一遍,for循环不能循环对象,因为对象的属性名都是字符串,不能循环
所以用for in循环
console.log("a" in obj); // a 是不是 obj的属性名
console.log("e" in obj); // true
for(var prop in obj){
//prop 自定义的变量名,没有初始值
// in 在..里面
//遍历时候认为对象中有属性名存在的都会遍历出来,并且将所有obj中的属性名分别赋值給prop
console.log(prop);//key
console.log(obj[prop]);//拿到变量prop属性名对应的值 value
}
// 其他语言obj遍历时 没有顺序但是都会遍历完毕
// js中的对象遍历是根据对象属性添加的先后来遍历,对象遍历是有顺序(特有)
复制对象元素到另一个对象中
var obj={
a:1,
b:2,
c:3,
d:4,
e:undefined
}
var o = {f:10,g:20};
for(var prop in obj){
o[prop] = obj[prop];//把obj的属性名复制给o 并且值为原来的值
}
ES6新推出的复制方式
Object.assign(o,obj);//前面是复制的目标,后面是将谁复制过去
console.log(o);
也可以
var o = Object.assign(o,obj);
console.log(o);