Object 對象(構造函數)的方法

Object 構造函數的方法

Object.assign()

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()

Object.create();使用指定的原型對象和屬性建立一個新對象。spa

語法:Object.create(proto[, propertiesObject])prototype

  • 參數:proto 新建立對象的原型對象。 propertiesObject 可選。若是沒有指定爲 undefined,則是要添加到新建立對象的可枚舉屬性(即其自身定義的屬性,而不是其原型鏈上的枚舉屬性)對象的屬性描述符以及相應的屬性名稱。這些屬性對應Object.defineProperties()的第二個參數。
  • 返回值:一個新對象,帶着指定的原型對象和屬性。
注意:若是propertiesObject參數是 null 或非原始包裝對象,則拋出一個 TypeError 異常
複製代碼

Object.defineProperty()

Object.defineProperty();給對象添加一個屬性並指定該屬性的配置。code

語法:Object.defineProperty(obj, prop, descriptor)對象

  • 參數:obj 要在其上定義屬性的對象。 prop 要定義或修改的屬性的名稱。 descriptor 將被定義或修改的屬性描述符。
  • 返回值:被傳遞給函數的對象。
該方法容許精確添加或修改對象的屬性。經過賦值操做添加的普通屬性是可枚舉的,
  可以在屬性枚舉期間呈現出來(for...in 或 Object.keys 方法),這些屬性的值能夠被改變,也能夠被刪除。
  這個方法容許修改默認的額外選項(或配置)。
  默認狀況下,使用 Object.defineProperty() 添加的屬性值是不可修改的。
複製代碼

Object.defineProperties()

Object.defineProperties();給對象添加多個屬性並分別指定它們的配置。繼承

語法:Object.defineProperties(obj, props)ip

  • 參數:obj 在其上定義或修改屬性的對象。 props 要定義其可枚舉屬性或修改的屬性描述符的對象。對象中存在的屬性描述符主要有兩種:數據描述符和訪問器描述符(更多詳情,請參閱Object.defineProperty())。
  • 返回值:傳遞給函數的對象。

Object.entries()

Object.entries();返回給定對象自身可枚舉屬性的 [key, value] 數組。原型鏈

語法:Object.entries(obj)文檔

  • 參數:obj 能夠返回其可枚舉屬性的鍵值對的對象。
  • 返回值:給定對象自身可枚舉屬性的鍵值對數組。
Object.entries()返回一個數組,其元素是與直接在object上找到的可枚舉屬性鍵值對相對應的數組。
  屬性的順序與經過手動循環對象的屬性值所給出的順序相同。
複製代碼

Object.freeze()

** Object.freeze();凍結對象:其餘代碼不能刪除或更改任何屬性。**

語法:Object.freeze(obj)

  • 參數:obj 要被凍結的對象。
  • 返回值:被凍結的對象。
數據屬性的值不可更改,訪問器屬性(有getter和setter)也一樣(但因爲是函數調用,給人的錯覺是仍是能夠修改這個屬性)。
  若是一個屬性的值是個對象,則這個對象中的屬性是能夠修改的,除非它也是個凍結對象。
  數組做爲一種對象,被凍結,其元素不能被修改。沒有數組元素能夠被添加或移除。
  這個方法返回傳遞的對象,而不是建立一個被凍結的副本。
複製代碼

Object.getOwnPropertyDescriptor()

Object.getOwnPropertyDescriptor();返回對象指定的屬性配置。

語法:Object.getOwnPropertyDescriptor(obj, prop)

  • 參數:obj 須要查找的目標對象 props 目標對象內屬性名稱
  • 返回值:若是指定的屬性存在於對象上,則返回其屬性描述符對象(property descriptor),不然返回 undefined。

Object.getOwnPropertyNames()

Object.getOwnPropertyNames();返回一個數組,它包含了指定對象全部的可枚舉或不可枚舉的屬性名。

語法:Object.getOwnPropertyNames(obj)

  • 參數:obj 一個對象,其自身的可枚舉和不可枚舉屬性的名稱被返回。
  • 返回值:在給定對象上找到的自身屬性對應的字符串數組。

Object.getOwnPropertySymbols()

Object.getOwnPropertySymbols();返回一個數組,它包含了指定對象自身全部的符號屬性。

語法:Object.getOwnPropertySymbols(obj)

  • 參數:obj 要返回 Symbol 屬性的對象。
  • 返回值:在給定對象自身上找到的全部 Symbol 屬性的數組。

Object.getPrototypeOf()

Object.getPrototypeOf();返回指定對象的原型對象。

語法:Object.getPrototypeOf(object)

  • 參數:obj 要返回其原型的對象。
  • 返回值:給定對象的原型。若是沒有繼承屬性,則返回 null 。

Object.is()

Object.is();比較兩個值是否相同。全部 NaN 值都相等(這與==和===不一樣)。

語法:Object.is(value1, value2);

  • 參數:value1 第一個須要比較的值。 value2 第二個須要比較的值。
  • 返回值:表示兩個參數是否相同的布爾值 。
這種相等性判斷邏輯和傳統的==運算不一樣,==運算符會對它兩邊的操做數作隱式類型轉換(若是它們類型不一樣),
  而後才進行相等性比較,(因此纔會有相似 "" == false 等於 true 的現象),但 Object.is 不會作這種類型轉換。
複製代碼
這與 === 運算符的斷定方式也不同。=== 運算符(和== 運算符)將數字值 -0 和 +0 視爲相等,並認爲 Number.NaN 不等於 NaN。
複製代碼

Object.isExtensible()

Object.isExtensible();判斷對象是否可擴展。

語法:Object.isExtensible(obj)

  • 參數:obj 須要檢測的對象
  • 返回值: 表示給定對象是否可擴展的一個Boolean 。
默認狀況下,對象是可擴展的:便可覺得他們添加新的屬性。以及它們的 __proto__ 屬性能夠被更改。
  Object.preventExtensions,Object.seal 或 Object.freeze 方法均可以標記一個對象爲不可擴展(non-extensible)。
複製代碼

Object.isFrozen()

Object.isFrozen();判斷對象是否已經凍結。

語法:Object.freeze(obj)

  • 參數:obj 要被凍結的對象。
  • 返回值: 被凍結的對象。

Object.isSealed()

Object.isSealed();判斷對象是否已經密封。

語法:Object.isSealed(obj)

  • 參數:obj要被檢查的對象。
  • 返回值: 表示給定對象是否被密封的一個Boolean 。

Object.keys()

Object.keys();返回一個包含全部給定對象自身可枚舉屬性名稱的數組。

語法:Object.keys(obj)

  • 參數:obj要返回其枚舉自身屬性的對象。
  • 返回值: 一個表示給定對象的全部可枚舉屬性的字符串數組。
Object.keys 返回一個全部元素爲字符串的數組,其元素來自於從給定的object上面可直接枚舉的屬性。
  這些屬性的順序與手動遍歷該對象屬性時的一致。
複製代碼

Object.preventExtensions()

Object.preventExtensions()防止對象的任何擴展。

語法:Object.preventExtensions(obj)

  • 參數:obj將要變得不可擴展的對象。
  • 返回值: 已經不可擴展的對象。

Object.seal()

Object.seal();防止其餘代碼刪除對象的屬性。

語法:Object.seal(obj)

  • 參數:obj將要被密封的對象。
  • 返回值: 被密封的對象。

Object.setPrototypeOf()

Object.setPrototypeOf();設置對象的原型(即內部 [[Prototype]] 屬性)。

語法:Object.setPrototypeOf(obj, prototype)

  • 參數:obj要設置其原型的對象。prototype 該對象的新原型(一個對象 或 null).

Object.values()

Object.values();返回給定對象自身可枚舉值的數組。

語法:Object.values(obj)

  • 參數:obj被返回可枚舉屬性值的對象。
  • 返回值:一個包含對象自身的全部可枚舉屬性值的數組。
Object.values()返回一個數組,其元素是在對象上找到的可枚舉屬性值。
  屬性的順序與經過手動循環對象的屬性值所給出的順序相同。
複製代碼

總結:

  • Object.assign() 方法用於將全部可枚舉屬性的值從一個或多個源對象複製到目標對象。它將返回目標對象。
  • Object.create()方法建立一個新對象,使用現有的對象來提供新建立的對象的__proto__。
  • Object.defineProperties() 方法直接在一個對象上定義新的屬性或修改現有屬性,並返回該對象。
  • Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 並返回這個對象。
  • Object.entries()方法返回一個給定對象自身可枚舉屬性的鍵值對數組,其排列與使用 for...in 循環遍歷該對象時返回的順序一致(區別在於 for-in 循環也枚舉原型鏈中的屬性)。
  • Object.freeze() 方法能夠凍結一個對象。一個被凍結的對象不再能被修改;凍結了一個對象則不能向這個對象添加新的屬性,不能刪除已有屬性,不能修改該對象已有屬性的可枚舉性、可配置性、可寫性,以及不能修改已有屬性的值。此外,凍結一個對象後該對象的原型也不能被修改。freeze() 返回和傳入的參數相同的對象。
  • Object.fromEntries() 方法把鍵值對列表轉換爲一個對象。
  • Object.getOwnPropertyDescriptor() 方法返回指定對象上一個自有屬性對應的屬性描述符。(自有屬性指的是直接賦予該對象的屬性,不須要從原型鏈上進行查找的屬性)
  • Object.getOwnPropertyNames()方法返回一個由指定對象的全部自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值做爲名稱的屬性)組成的數組。
  • Object.getOwnPropertySymbols() 方法返回一個給定對象自身的全部 Symbol 屬性的數組。
  • Object.getPrototypeOf() 方法返回指定對象的原型(內部[[Prototype]]屬性的值)。
  • Object.is() 方法判斷兩個值是不是相同的值。
  • Object.isExtensible() 方法判斷一個對象是不是可擴展的(是否能夠在它上面添加新的屬性)。
  • Object.isFrozen()方法判斷一個對象是否被凍結。
  • Object.isSealed() 方法判斷一個對象是否被密封。
  • Object.keys() 方法會返回一個由一個給定對象的自身可枚舉屬性組成的數組,數組中屬性名的排列順序和使用 for...in 循環遍歷該對象時返回的順序一致 。
  • Object.preventExtensions()方法讓一個對象變的不可擴展,也就是永遠不能再添加新的屬性。
  • Object.prototype 屬性表示 Object 的原型對象。
  • Object.seal()方法封閉一個對象,阻止添加新屬性並將全部現有屬性標記爲不可配置。當前屬性的值只要可寫就能夠改變。
  • Object.setPrototypeOf() 方法設置一個指定的對象的原型 ( 即, 內部[[Prototype]]屬性)到另外一個對象或 null。
  • Object.values()方法返回一個給定對象自身的全部可枚舉屬性值的數組,值的順序與使用for...in循環的順序相同 ( 區別在於 for-in 循環枚舉原型鏈中的屬性 )。

後續再把具體代碼案例加上來吧,今天好累,寫的我腦袋疼!!!

參考文檔:developer.mozilla.org/zh-CN/docs/…

相關文章
相關標籤/搜索