Object.assign: 将所有可枚举属性的值从一个或多个对象复制到目标对象,并返回目标对象
const obj1 = { a: 1, b: 3}
const obj2 = { a: 5, c: 6}
const obj3 = Object.assign(obj1, obj2)
console.log(obj1)
console.log(obj2)
console.log(obj3)
const obj1 = { a: 1, b: 3}
const obj2 = { a: 5, c: 6}
const obj3 = Object.assign({}, obj1, obj2)
console.log(obj1)
console.log(obj2)
console.log(obj3)
Object.defineProperty: 定义或修改一个对象中的属性
Object.defineProperties: 定义或修改一个对象中的多个属性
Object.getOwnPropertyDescriptor: 获取一个对象中的一个属性描述
Object.getOwnPropertyDescriptors: 获取一个对象中的所有属性描述
const obj = new Object()
Object.defineProperty(obj, 'name', {
configurable: false,
writable: false,
enumerable: true,
value: '一个不能被修改的名字'
})
console.log(obj.name)
const obj2 = new Object()
Object.defineProperties(obj2, {
name: {
writable: true,
value: '张三'
},
Name: {
get: function() {
return `${this.name}先生`
},
set: function(value) {
this.name = value || '未知'
}
}
})
console.log(obj2.name)
console.log(obj2.Name)
obj2.Name = ''
console.log(obj2.name)
Object.getOwnPropertyDescriptor(obj2, 'name')
Object.getOwnPropertyDescriptor(obj2)
Object.entries: 返回一个对象自身可枚举属性的键值对,顺序与for-in循环时的顺序一致
const obj = { foo: 'bar', baz: 42 }
Object.entries(obj)
Object.freeze: 冻结一个对象(只有一层),不能修改任何信息,包括新增属性、删除属性、修改属性值
Object.isFrozen: 判断一个对象是否已经被冻结
const obj = {
a: 1,
b: {
c: 2
}
}
console.log(obj.a)
console.log(obj.b.c)
obj.a = 3
obj.b.c = 4
console.log(obj.a)
console.log(obj.b.c)
Object.isFrozen(obj)
Object.freeze(obj)
Object.isFrozen(obj)
obj.a = 5
obj.b.c = 6
console.log(obj.a)
console.log(obj.b.c)
Object.keys: 获取一个对象中所有的key值(不包括不可枚举属性和Symbol属性)
Object.values: 获取一个对象中所有的value值(不包括不可枚举属性和Symbol属性)
const obj = {}
Object.defineProperty(obj, 'a', {Enumerable: false, value: 1})
obj[Symbol()] = 2
obj['b'] = 3
console.log(Object.keys(obj))
console.log(Object.values(obj))
console.log(Object.getOwnPropertyNames(obj))
console.log(Object.getOwnPropertySymbols(obj))
Object.getOwnPropertyNames: 获取一个对象所有属性的key值(包括不可枚举属性,不包括Symbol属性)
const obj = {
foo: 'bar',
baz: 43
}
Object.getOwnPropertyNames(obj)
Object.getOwnPropertySymbols: 获取一个对象所有Symbol属性
const obj = {}
obj[Symbol('a')] = 'localSymbol'
obj[Symbol.for('b')] = 'globalSymbol'
Object.getOwnPropertySymbols(obj)
拓展:Symbol是为了保证对象属性的一致性
const sy = Symbol('a')
const obj = {}
obj[Symbol('a')] = 3
obj[sy] = 4
console.log(obj[Symbol('a')])
console.log(obj[sy])
Object.preventExtensions: 使一个对象不再具有拓展性(不能添加新属性)
Object.isExtensible: 判断一个对象是否具有拓展性
const obj = {v1: 1}
obj.v2 = 2
Object.preventExtensions(obj)
obj.v3 = 3
obj.v2 = 3
Object.isExtensible(obj)
hasOwnProperty: 判断一个对象是否包含某个属性(不包括原型链上的属性)
const obj = { a: 2 }
obj.hasOwnProperty('a')
obj.hasOwnProperty('b')
isPrototypeOf: 判断一个对象是否在某个对象的原型链上
function fn() {}
_fn1 = new fn()
_fn2 = fn()
console.log(fn.isPrototypeOf(_fn1))
console.log(fn.prototype.isPrototypeOf(_fn1))
console.log(fn.prototype.isPrototypeOf(_fn2))
console.log(Object.prototype.isPrototypeOf(_fn1))
console.log(Object.prototype.isPrototypeOf(_fn2))