对象的合并 将源对象(source)的全部可枚举属性复制到目标对象数组
Object.assign(target, source1, source2)
若是目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的。Object.assign()拷贝的属性是有限制的,只拷贝源对象的自身属性(不拷贝继承属性),也不拷贝不可枚举属性。prototype
插播一段知识点:
对象的每一个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwnPropertyDescriptor方法能够获取该属性的描述对象。code
let obj = { foo: 123 }; Object.getOwnPropertyDescriptor(obj, 'foo') // { // value: 123, // writable: true, // enumerable: true, // configurable: true // }
建立一个新对象,使用现有的对象来提供新建立的对象的__proto__对象
Object.create(proto, [propertiesObject])
proto
新建立对象的原型对象。
propertiesObject
可选。若是没有指定为 undefined,则是要添加到新建立对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defindProperties()的第二个参数。继承
该方法直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。ip
Object.defineProperty(obj, prop, descriptor)
obj
要在其上定义属性的对象。
prop
要定义或修改的属性的名称。
descriptor
将被定义或修改的属性描述符。原型链
Object.defineProperty(obj, "key", { enumerable: false, configurable: false, writable: false, value: "static" });
直接在一个对象上定义新的属性或修改现有属性,并返回该对象。字符串
Object.defineProperties(obj, props)
var obj = {}; Object.defineProperties(obj, { 'property1': { value: true, writable: true }, 'property2': { value: 'Hello', writable: false } // etc. etc. });
Object.is() 判断两个值是否相同。若是下列任何一项成立,则两个值相同:get
两个值都是数字而且原型
- 都是正零 +0 - 都是负零 -0 - 都是 NaN - 都是除零和 NaN 外的其它同一个数字
这种相等性判断逻辑和传统的 == 运算符所用的不一样,== 运算符会对它两边的操做数作隐式类型转换(若是它们类型不一样),而后才进行相等性比较,(因此才会有相似 "" == false 为 true 的现象),但 Object.is 不会作这种类型转换。
这与===运算符也不同。===运算符(和==运算符)将数字值-0和+0视为相等,并认为Number.NaN不等于NaN。
Object.keys():返回一个数组,成员是参数对象自身的(不含继承的)全部可遍历(enumerable)属性的键名
Object.values:返回一个数组,成员是参数对象自身的(不含继承的)全部可遍历(enumerable)属性的键值
Object.entries:返回一个数组,成员是参数对象自身的(不含继承的)全部可遍历(enumerable)属性的键值对数组
let {keys, values, entries} = Object; let obj = { a: 1, b: 2, c: 3 }; for (let key of keys(obj)) { console.log(key); // 'a', 'b', 'c' } for (let value of values(obj)) { console.log(value); // 1, 2, 3 } for (let [key, value] of entries(obj)) { console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3] }
返回指定对象的原型(内部[[Prototype]]属性的值)。
语法:
Object.getPrototypeOf(object)
object:要返回其原型的对象。
返回值:给定对象的原型。若是没有继承属性,则返回 null
const prototype1 = {}; const object1 = Object.create(prototype1); console.log(Object.getPrototypeOf(object1) === prototype1); // expected output: true
介绍一个经常使用操做符 in
若是指定的属性在指定的对象或其原型链中,则in 运算符返回true
语法:
prop in object
var obj ={ a: 1 } console.log('a' in obj); // true console.log('b' in obj); // false