对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
key是字符串,引号可以省略
1.声明对象
let obj = {name:'Mike'}
let obj = new Object({name:'Mike'})
2. 读取对象属性
- 采用点运算符
obj.name // 'Mike'
- 采用方括号[],key必须是字符串形式,否则会被认为是变量
obj['name'] // 'Mike'
3. 对象属性赋值
点运算符和方括号运算符,不仅可以用来读取值,还可以用来赋值。
obj.age = '18';
obj['hobby'] = 'basketball';
console.log(obj); // {name: 'Mike', age: '18', hobby: 'basketball'}
通过Object.assign批量赋值
Object.assign(obj,{gender:'male'});
4. 查看属性 Object.keys
Object.keys(obj); // ['name', 'age', 'hobby']
5. 删除属性 delete 删除成功返回true
delete obj.hobby;
console.log(obj); //{name: 'Mike', age: '18'}
注意: 删除不存在的属性,也会返回true,所以不能仅根据这个结果来判定对象有该属性
只有一种情况下,delete会返回false,即通过Object.definedProperty方法设置的属性,且其configurable为false
6. 检测属性是否存在:in运算符
'name' in obj; //true
'hobby' in obj; //false
不能通过obj.name === 'undefined'或者typeof obj.name === 'undefined'来判断obj是否有name属性,因为obj存在name属性且其值为undefined时,也会返回true,typeof undefined为‘undefined’
in 与 hasOwnProperty区别:
in 不能识别属性是对象自身的还是继承的,需要通过hasOwnProperty来判断,是否为对象的自有属性;
'name' in obj; //true
'toString' in obj; //true
obj.hasOwnProperty('toString'); // false
7. 遍历对象 for...in
遍历可遍历的属性,遍历自身属性和继承属性(除非继承属性设置了不可遍历)
for(let i in obj){
console.log(obj[i]);
}
//Mike
//18