对象
对象的遍历方法
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));