對象的合併 將源對象(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