Object.create(原型,描述属性)
Object.assign(target,source),只拷贝source内自身可枚举属性,为浅拷贝
for in 获取实例本身及原型链属性名 for in 循环数组,参数为字符串‘0’、‘1’
Object.keys() 获取本身可枚举属性名 不包括原型链,返回属性名构成的数组
Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in
循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)
const obj1 = {
a:1,
b:2
}
for(let [key,value] of Object.entries(obj1)){
console.log(`${key}:${value}`)
}
// a:1
// b:2
Object.fromEntries()方法为Object.entries的反转函数,将array、map转换成对象(注:在 ECMAScript 2019 中首次被定义)
const map = new Map([['a',1],['b',2]])
const obj = Object.fromEntries(map)
console.log(obj)
//{a:1,b:2}
const arr = [['a',1],['b',2]]
const obj2 = Object.fromEntries(arr)
console.log(obj2)
//{a:1,b:2}
obj.hasOwnProperty() 判断本身是否包含某属性,不查询原型链
Object.getOwnPropertyNames() 获取对象自身所有属性,包括不可枚举的属性,不包括属性名为symbol的属性,不查询原型链
Object.getOwnPropertySymbols 返回对象自身所有symbol属性
Object.defineProperty() 用于定义对象属性,及属性描述
Object.defineProperties()用于定义对象属性,及属性描述
var obj = {};
Object.defineProperties(obj, {
'property1': {
value: true,
writable: true
},
'property2': {
value: 'Hello',
writable: false
}
});
Object.getOwnPropertyDescriptor(obj,prop)返回指定对象某自有属性对应的属性描述符,(对象自身属性,不查找原型)
Object.getOwnPropertyDescriptors(obj) 返回指定对象所有自由属性的属性描述
Object.freeze() 冻结对象,不可修改属性、新增属性、删除属性;对象属性的可描述性、可枚举性、配置性也不可修改;冻结对象的原型也不可修改。注:该方法为浅冻结,若属性值为对象,可修改对象属性
深冻结方法
function deepFreeze(obj){
let keys = Object.getOwnpropertyNames(obj)
keys.forEach(function(item){
if(typeof(obj[item])==='Object'&&obj[item]!==null){
deepFreeze(obj[item])
}
})
return Object.freeze(obj)
}
Object.seal()密封对象属性,可修改属性、不可删除属性、不可新增属性,将所有属性标记为不可配置
Object.getPrototypeOf()返回指定对象的原型
Object.setPrototypeOf()方法设置指定对象的原型
Object.is()判断两个值是否相等
Object.isExtensible()判断指定对象是否是可扩展的
Object.isFrozen()判断对象是否被冻结 ,详见:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen
Object.isSeal() 判断对象是否被密封