JavaScript-对象

对象

创建对象

  • 使用new关键字

    let obj = new Object();
    
  • 使用字面量创建

    let obj = {};
    

对象常用方法

  • 属性遍历

    for (let key in obj){
        // ...
    }
    
  • 属性删除

    delete obj.name;
    delete obj.say;
    
  • 判断属性有无

    // in 会在原型链上查找
    console.log(attrName in obj);
    
    // hasOwnPrototype 只会在构造函数中寻找
    console.log(obj.hasOwnPrototype(attrName));
    
  • 解构赋值

    // 解构赋值定义的变量名必须与对象内部属性名相同,否则无法赋值成功
    // 解构赋值可以为变量赋默认值
    let obj = {name: 'zs', age: 18};
    let {name, age = 20, gender = 'man'} = obj;
    console.log(name, age, gender); // 'zs' 18 man
    

对象深拷贝

  • 深拷贝:通过一个参数给另一个参数赋值后,改变新的参数,不会修改原有参数。基本数据类型都是深拷贝。

  • 浅拷贝:通过一个参数给另一个参数赋值后,改变新的参数,原有参数也会被修改。引用数据类型都是浅拷贝。

    // 对象深拷贝
    // 通过assign函数
    let newObj = Object.assign({}, obj);
    
    // 自定义函数实现对象深拷贝
    let deepCopy = (target, source) => {
        for (let key in source){
            if (source[key] instanceof Object){
                target[key] = new source[key].constructor;
                deepCopy(target[key], source[key]);
            } else {
                target[key] = source[key];
            }
        }
        return target;
    }
    
原文地址:https://www.cnblogs.com/luwenfeng/p/11693754.html