每天一个知识点之Object
Object.prototype.assign(target, …sources)
参数
target // 目标对象
sources // 源对象
返回值
目标对象 target
特性:
- 目标对象和源对象有相同的键,则属性被源对象覆盖。
- 只能拷贝只能拷贝源对象中可枚举的属性
- 该方法使用源对象的[[Get]]和目标对象的[[Set]],所以它会调用相关 getter 和 setter。
- String类型和 Symbol 类型的属性都会被拷贝。
- 不会跳过那些值为 null 或 undefined 的源对象。
其他要点
- 继承的属性和不可枚举的属性不能拷贝
1 | const obj = Object.create({foo: 1}, { // foo 是个继承属性。 |
- 拷贝数组
1 | const foo = Object.assign({}, [1,2,3]) // {0: 1, 1: 2, 2: 3} |
- 拷贝字符串
1 | const foo = Object.assign({}, '123') // {0: 1, 1: 2, 2: 3} |
- 原始类型会被包装,null 和 undefined 会被忽略。
1 | const foo = Object.assign({}, null) // {} |
- 异常会打断后续拷贝
1 | const target = Object.defineProperty({}, "foo", { |
Object.hasOwnProperty()
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是是否有指定的键
所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。