js对象常用方法

631 阅读2分钟

一、对象取属性值

let obj = {name: 'zhang', age: '24', tel: '90909090'}
let name = obj.name
let age = obj['age']//这样取属性值,属性外面的引号不能少
console.log(name)
console.log(age)
console.log(obj)
输出:  zhang
        24
        {name: "zhang", age: "24", tel: "90909090"}

二、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 }
    console.log(o1)  // { a: 1, b: 2, c: 3 }
    注意:目标对象自身也会改变。

    有相同属性
    let o1 = { a: 1, b: 1, c: 1 }
    let o2 = { b: 2, c: 2 }
    let o3 = { c: 3 }
    let obj = Object.assign({}, o1, o2, o3)
    console.log(obj) // { a: 1, b: 2, c: 3}
    注意:属性被后续参数中具有相同属性的其他对象覆盖,但不会改变原来o1,o2,o3对象,改变的是目标对象
    
2、复制一个对象

    let obj = { a: 1 }
    let copy = Object.assign({}, obj)
    console.log(copy) // { a: 1 }
    
3、拷贝

    let obj1 = { a: 0 , b: { c: 0}}
    let obj2 = Object.assign({}, obj1)
    console.log(JSON.stringify(obj2)) // { a: 0, b: { c: 0}} 
    
    obj1.a = 1
    console.log(JSON.stringify(obj1)) // { a: 1, b: { c: 0}} 
    console.log(JSON.stringify(obj2)) // { a: 0, b: { c: 0}} 
    
    obj2.a = 2
    console.log(JSON.stringify(obj1)) // { a: 1, b: { c: 0}} 
    console.log(JSON.stringify(obj2)) // { a: 2, b: { c: 0}}
     
    obj2.b.c = 3
    console.log(JSON.stringify(obj1)) // { a: 1, b: { c: 3}} 
    console.log(JSON.stringify(obj2)) // { a: 2, b: { c: 3}}
    这里Object.assign()拷贝的是对象属性,如果对象属性为引用数据类型
    ,那么改变引用数据类型的属性值都会发生改变,所以项目中一般使用深拷贝
    
    // 深拷贝 
    obj1 = { a: 0 , b: { c: 0}} 
    let obj3 = JSON.parse(JSON.stringify(obj1)); 
    obj1.a = 4
    obj1.b.c = 4
    console.log(JSON.stringify(obj3)) // { a: 0, b: { c: 0}}
    注意:这里利用JSON.parse(),JSON.stringify()进行对象深拷贝,不会
    对原对象进行修改,JSON.parse()将字符串转化为对象,JSON.stringify
    ()将对象转化为字符串

三、Object.keys(obj)

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

    let obj = {a: 1, b: 2, c: 3}
    let arr = Object.keys(obj)
    console.log(arr) //[a, b, c]
    console.log(obj) //{a: 1, b: 2, c: 3}
    
    如果传入的是数组和字符串则返回的是数组元素与字符的索引值
    let str = "Beijing"
    let arr = [a, b, c]
    console.log(Object.keys(str)) 
    // ["0", "1", "2", "3", "4", "5", "6"]
    console.log(Object.keys(arr))
    //["0", "1", "2"]
    
    如果需遍历对象操作对象,这里也可以写成如下形式:
    let obj = {a: 1, b: 2, c: 3}
    Object.keys(obj).forEach(key => {
        obj[key] = ''
    })
    console.log(obj) //{a: '', b: '', c: ''}

四、for in遍历对象键值

var obj = {0: 'a', 1: 'b',2 :'c'}
for (var i in obj) {
    console.log(i, ":", obj[i])
}
输出    0 : a
        1 : b
        2 : c