Object.assign();經過複製一個或多個對象來建立一個新的對象。數組
語法:
Object.assign(target, ...sources)
函數
- 參數:
target
目標對象。sources
源對象- 返回值:目標對象。
若是目標對象中的屬性具備相同的鍵,則屬性將被源對象中的屬性覆蓋。
後面的源對象的屬性將相似地覆蓋前面的源對象的屬性。
複製代碼
Object.assign 方法只會拷貝源對象自身的而且可枚舉的屬性到目標對象。
該方法使用源對象的[[Get]]和目標對象的[[Set]],因此它會調用相關 getter 和 setter。
所以,它分配屬性,而不只僅是複製或定義新的屬性。若是合併源包含getter,這可能使其不適合將新屬性合併到原型中。
爲了將屬性定義(包括其可枚舉性)複製到原型,應使用Object.getOwnPropertyDescriptor()和Object.defineProperty() 。
複製代碼
- 注意,Object.assign 不會在那些source對象值爲 null 或 undefined 的時候拋出錯誤。
複製代碼
Object.create();使用指定的原型對象和屬性建立一個新對象。spa
語法:
Object.create(proto[, propertiesObject])
prototype
- 參數:
proto
新建立對象的原型對象。propertiesObject
可選。若是沒有指定爲 undefined,則是要添加到新建立對象的可枚舉屬性(即其自身定義的屬性,而不是其原型鏈上的枚舉屬性)對象的屬性描述符以及相應的屬性名稱。這些屬性對應Object.defineProperties()的第二個參數。
- 返回值:一個新對象,帶着指定的原型對象和屬性。
注意:若是propertiesObject參數是 null 或非原始包裝對象,則拋出一個 TypeError 異常
複製代碼
Object.defineProperty();給對象添加一個屬性並指定該屬性的配置。code
語法:
Object.defineProperty(obj, prop, descriptor)
對象
- 參數:
obj
要在其上定義屬性的對象。prop
要定義或修改的屬性的名稱。descriptor
將被定義或修改的屬性描述符。- 返回值:被傳遞給函數的對象。
該方法容許精確添加或修改對象的屬性。經過賦值操做添加的普通屬性是可枚舉的,
可以在屬性枚舉期間呈現出來(for...in 或 Object.keys 方法),這些屬性的值能夠被改變,也能夠被刪除。
這個方法容許修改默認的額外選項(或配置)。
默認狀況下,使用 Object.defineProperty() 添加的屬性值是不可修改的。
複製代碼
Object.defineProperties();給對象添加多個屬性並分別指定它們的配置。繼承
語法:
Object.defineProperties(obj, props)
ip
- 參數:
obj
在其上定義或修改屬性的對象。props
要定義其可枚舉屬性或修改的屬性描述符的對象。對象中存在的屬性描述符主要有兩種:數據描述符和訪問器描述符(更多詳情,請參閱Object.defineProperty())。- 返回值:傳遞給函數的對象。
Object.entries();返回給定對象自身可枚舉屬性的 [key, value] 數組。原型鏈
語法:
Object.entries(obj)
文檔
- 參數:
obj
能夠返回其可枚舉屬性的鍵值對的對象。- 返回值:給定對象自身可枚舉屬性的鍵值對數組。
Object.entries()返回一個數組,其元素是與直接在object上找到的可枚舉屬性鍵值對相對應的數組。
屬性的順序與經過手動循環對象的屬性值所給出的順序相同。
複製代碼
** Object.freeze();凍結對象:其餘代碼不能刪除或更改任何屬性。**
語法:
Object.freeze(obj)
- 參數:
obj
要被凍結的對象。- 返回值:被凍結的對象。
數據屬性的值不可更改,訪問器屬性(有getter和setter)也一樣(但因爲是函數調用,給人的錯覺是仍是能夠修改這個屬性)。
若是一個屬性的值是個對象,則這個對象中的屬性是能夠修改的,除非它也是個凍結對象。
數組做爲一種對象,被凍結,其元素不能被修改。沒有數組元素能夠被添加或移除。
這個方法返回傳遞的對象,而不是建立一個被凍結的副本。
複製代碼
Object.getOwnPropertyDescriptor();返回對象指定的屬性配置。
語法:
Object.getOwnPropertyDescriptor(obj, prop)
- 參數:
obj
須要查找的目標對象props
目標對象內屬性名稱- 返回值:若是指定的屬性存在於對象上,則返回其屬性描述符對象(property descriptor),不然返回 undefined。
Object.getOwnPropertyNames();返回一個數組,它包含了指定對象全部的可枚舉或不可枚舉的屬性名。
語法:
Object.getOwnPropertyNames(obj)
- 參數:
obj
一個對象,其自身的可枚舉和不可枚舉屬性的名稱被返回。- 返回值:在給定對象上找到的自身屬性對應的字符串數組。
Object.getOwnPropertySymbols();返回一個數組,它包含了指定對象自身全部的符號屬性。
語法:
Object.getOwnPropertySymbols(obj)
- 參數:
obj
要返回 Symbol 屬性的對象。- 返回值:在給定對象自身上找到的全部 Symbol 屬性的數組。
Object.getPrototypeOf();返回指定對象的原型對象。
語法:
Object.getPrototypeOf(object)
- 參數:
obj
要返回其原型的對象。- 返回值:給定對象的原型。若是沒有繼承屬性,則返回 null 。
Object.is();比較兩個值是否相同。全部 NaN 值都相等(這與==和===不一樣)。
語法:
Object.is(value1, value2);
- 參數:
value1
第一個須要比較的值。value2
第二個須要比較的值。- 返回值:表示兩個參數是否相同的布爾值 。
這種相等性判斷邏輯和傳統的==運算不一樣,==運算符會對它兩邊的操做數作隱式類型轉換(若是它們類型不一樣),
而後才進行相等性比較,(因此纔會有相似 "" == false 等於 true 的現象),但 Object.is 不會作這種類型轉換。
複製代碼
這與 === 運算符的斷定方式也不同。=== 運算符(和== 運算符)將數字值 -0 和 +0 視爲相等,並認爲 Number.NaN 不等於 NaN。
複製代碼
Object.isExtensible();判斷對象是否可擴展。
語法:
Object.isExtensible(obj)
- 參數:
obj
須要檢測的對象- 返回值: 表示給定對象是否可擴展的一個Boolean 。
默認狀況下,對象是可擴展的:便可覺得他們添加新的屬性。以及它們的 __proto__ 屬性能夠被更改。
Object.preventExtensions,Object.seal 或 Object.freeze 方法均可以標記一個對象爲不可擴展(non-extensible)。
複製代碼
Object.isFrozen();判斷對象是否已經凍結。
語法:
Object.freeze(obj)
- 參數:
obj
要被凍結的對象。- 返回值: 被凍結的對象。
Object.isSealed();判斷對象是否已經密封。
語法:
Object.isSealed(obj)
- 參數:
obj
要被檢查的對象。- 返回值: 表示給定對象是否被密封的一個Boolean 。
Object.keys();返回一個包含全部給定對象自身可枚舉屬性名稱的數組。
語法:
Object.keys(obj)
- 參數:
obj
要返回其枚舉自身屬性的對象。- 返回值: 一個表示給定對象的全部可枚舉屬性的字符串數組。
Object.keys 返回一個全部元素爲字符串的數組,其元素來自於從給定的object上面可直接枚舉的屬性。
這些屬性的順序與手動遍歷該對象屬性時的一致。
複製代碼
Object.preventExtensions()防止對象的任何擴展。
語法:
Object.preventExtensions(obj)
- 參數:
obj
將要變得不可擴展的對象。- 返回值: 已經不可擴展的對象。
Object.seal();防止其餘代碼刪除對象的屬性。
語法:
Object.seal(obj)
- 參數:
obj
將要被密封的對象。- 返回值: 被密封的對象。
Object.setPrototypeOf();設置對象的原型(即內部 [[Prototype]] 屬性)。
語法:
Object.setPrototypeOf(obj, prototype)
- 參數:
obj
要設置其原型的對象。prototype
該對象的新原型(一個對象 或 null).
Object.values();返回給定對象自身可枚舉值的數組。
語法:
Object.values(obj)
- 參數:
obj
被返回可枚舉屬性值的對象。- 返回值:一個包含對象自身的全部可枚舉屬性值的數組。
Object.values()返回一個數組,其元素是在對象上找到的可枚舉屬性值。
屬性的順序與經過手動循環對象的屬性值所給出的順序相同。
複製代碼