对象Object的常用写法

78 阅读1分钟

对象

对象的遍历方法

let hd={
    name: "ronald",
    age : 18
}

//获取key
Object.keys(hd);     //name,age

//获取value
Object.values(hd);   //ronald,age

//获取键值对
Object.entires(hd);  //[["name":"ronald"],["age",18]]

//for in循环对象
for(const key in hd){
    console.log(key)
    console.log(hd[key])
}

对象的解构赋值

let {name,age} = hd;
console.log(name);

多重解构

let hd1 = {
    name : 'ronald',
    age : 18,
    lesson : {
        objectName : '语文'
    }
}

let {name,age,{objectName}} = hd1;
console.log(objectName); //语文

对象的浅拷贝

1.直接new一个新对象

let hd = {name : 'ronald'};
let obj = {};
obj.name = hd.name

2.循环遍历

let obj = {}
for(const key in hd){
    obj[key] = hd[key]
}

3.Object.assign()

let obj = Object.assign({},hd)
obj.name = '123' //不改变hd的name

4.展开语法

let obj = {...hd};

对象的深拷贝

function deepCopy(obj){
    const res = obj.instanceof Array ? [] : {}
    
    for(let key in obj){
        if(obj.hasOwnProperty(key)){
            res[key] = typeof obj[key] == 'object' ? deepCopy[obj[key]] : obj[key]
        }
    }
    return res;
}

对象的灵活配置

Object.defineProperty(obj,key)

writable: false false 不可写,不能被修改

enumerable: false 不能被遍历

configurable: true 不能被二次配置

不允许往对象添加属性 API

Object.preventExtensions(obj) 不允许再往此对象中添加数据

Object.isExtensible(obj) 查看是否可以往对象中添加数据

封闭对象 API

Object.seal(obj) 封闭对象,即不能删除已有属性,但可以修改已有属性的值,不能添加新的属性,既是configurable为false

Object.isSealed(obj) 查看对象是否被封闭,已封闭返回 true,未封闭返回 false JS

冻结对象API

Object.freeze(obj) 冻结对象,冻结后值不可被修改、属性不可重复修改、可以被遍历,即configurable和writable为false

Object.isFrozen(obj) 查看对象是否被冻结,是返回 true,不是返回 false

==访问器的优先级大于直接赋值==

JSON 自定义和 JSON 序列化(JSON转化为字符串)

let obj = {
  name: "lisi",
  title: "xuliehua",
  toJSON: function() {    //设置返回的数据格式
    return {
      newname: this.name,
    };
  },
};

// 第二个参数可以定义只返回那些数据

console.log(JSON.stringify(obj, null, 2));