- assign
功能:把多个的对象自身可枚举属性拷贝给目标对象并返回目标对象。
注意:
- 实质是使用源对象的 getter和目标对象的setter
- String和Symbol类型的属性都会被拷贝
- 拷贝过程如果中断,已经拷贝成功的属性不会受到影响,还未拷贝的属性将不会再被拷贝。
- 值为 null或 undefined的属性会被忽略
- 属于浅拷贝类型,如果属性中包含对象,对象修改后,最终值也会跟着改变
- 继承属性和不可枚举属性是不能拷贝的
- 原始类型会被包装为 object
栗子:
var copy = Object.assign({}, {a:1});
console.log(copy); // { a: 1 }
let src = {x:1,y:{a:1}}
let dist = Object.assign({},src);
src.y.a = 2//此时dist为:{ x: 1, y: { a: 2 } }
- create
功能:创建指定原型和属性的对象
栗子:
function A() {
}
function B(){
}
B.prototype = Object.create(A.prototype);
b = new B();
b instanceof A//true
- defineProperty | defineProperties
功能:为对象定义属性
属性描述:
configurable:当且仅当该属性的 configurable 为 true 时,该属性描述符
才能够被改变,也能够被删除。默认为 false
enumerable:当且仅当该属性的 enumerable 为 true 时,该属性才能够出现在对象的枚举属性中。默认为 false
value:初始值,默认为undefined
writable:是否可写,默认为 false
get: 返回实际值的函数,默认为undefined
set: 设置并返回实际值的函数,默认为undefined
var obj={};
Object.defineProperties(obj,{
p1:{
value:1
},
p2:{
value:2
}
})
obj.p1//1
obj.p2//2
- keys | getOwnPropertyNames
功能:获取对象自身属性名数组
区别:
keys:自身的可枚举的属性
getOwnPropertyNames:自身所有的属性
注意:
只是自身的属性,原型链上继承的属性可通过for...in获取
- hasOwnProperty
功能:判断某个对象是否含有指定的自身属性
- is
功能:判断两个对象是否是同一个值
注意:
1 ==运算符会对它两边的操作数做隐式的类型转换
2 ===不会对操作数进行类型转换,但是它会把 -0和 +0这两个数值视为相同的,还会把两个NaN看成是不相等的
3 只有满足下面任一条is才是true:
- 两个值都是 undefined
- 两个值都是 null
- 两个值都是 true或者都是 false
- 两个值是由相同个数的字符按照相同的顺序组成的字符串
- 两个值指向同一个对象
- 两个值都是数字并且
- 都是正零 +0
- 都是负零 -0
- 都是 NaN
- 都是除零和 NaN 外的其它同一个数字
网友评论