对象常用的方法总结

118 阅读2分钟

1.对象取属性值

let obj = {a:1, b:2, c:3}; 
console.log(obj.a);  //1  
console.log(obj['a']);  //1

2.Object.assign

1、合并对象
无相同属性
let o1 = { a: 1 }
let o2 = { b: 2 }
let o3 = { c: 3 }
let obj = Object.assign({},o1, o2, o3);
console.log(obj) // { a: 1, b: 2, c: 3 }
​
有相同属性,后面的属性覆盖前面的属性
let o1 = { a: 1 ,b:5}
let o2 = { b: 2 ,a:9}
let o3 = { c: 3 }
let obj = Object.assign({},o1, o2, o3);  //{a: 9, b: 2, c: 3}
​
----当然,现在一般用es6的扩展运算符了,推荐使用哦
let obj={...o1,...o2,...o3}  //和上面输出的结果一样
​
2.浅拷贝
let obj1 = {a: 1,
    b: {
        c: 2
    }
}
let obj2 = Object.assign({}, obj1)
obj1.a = 2
console.log(obj1);//{a: 2, b: {c:2}
console.log(obj2);//{a: 1, b: {c:2}
​
obj1.b.c = 3
console.log(obj1);//{a: 2, b: {c:3}
console.log(obj2);//{a: 1, b: {c:3}
​
//我们发现,当改变引用数据类型时,obj1和obj2都改变了,此时说明改变的是引用地址,这就是浅拷贝,我们一般用深拷贝
​
3.扩展之深拷贝  JSON.parse、JSON.stringify 
let obj1 = {
    a: 1,
    b: {
        c: 2
    }
}
let obj2=JSON.parse(JSON.stringify(obj1))
obj2.b.c=3
console.log(obj1);//{a: 1, b: {c:2}
console.log(obj2);//{a: 1, b: {c:3}
//我们发现,当改变引用数据类型时,只有obj2改变了,obj1没变,这就是深拷贝。

3.Object.keys

1、对象属性转化为一个数组,数组中包含着obj自己的所有属性,不包含原型链中的属性。

对象操作
let obj = {a: 1, b: 2, c: 3}
let arr = Object.keys(obj)
console.log(arr) //["a", "b", "c"]
​
数组和字符串操作,返回的是索引值
let obj='abc'
let arr = Object.keys(obj)
console.log(arr) //["0", "1", "2"]
​
let obj=['a','b','c']
let arr = Object.keys(obj)
console.log(arr) //["0", "1", "2"]

4.Object.values

1、对象值转化为一个数组,数组中包含着obj自己的所有属性值。

let obj = {a: 1, b: 2, c: 3}
let arr = Object.values(obj)
console.log(arr) //[1, 2, 3]

4.for in遍历对象键值

 let obj = { 0: 'a', 1: 'b', 2: 'c' }
 for (let prop in obj) {
     console.log(prop);  //遍历键
     console.log(obj[prop])//遍历值
 }

5.Object.entries

返回一个对象key和value键值对组成的数组

const obj = { a: 'aaa', b: 'bbb' };
console.log(Object.entries(obj));
// [["a", "aaa"], ["b", 'bbb']] 

6.obj.hasOwnProperty

判断对象中属性是否存在,用于实例对象

const obj = { a: 1, b: 2 };
console.log(obj.hasOwnProperty('a')); //true
console.log(obj.hasOwnProperty('c')); //false

\