JavaScript 对象基本用法

68 阅读1分钟

对象就是一组“键值对”(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