Object構造函數經常使用的方法

Object.assign()

對象的合併 將源對象(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
//  }
  • value:屬性值
  • wirtable: 可寫性(是否能夠修改(賦值))
  • enumerable:可枚舉屬性(是否能夠被遍歷到)
  • configurable:可配置屬性(是否能夠被刪除)

Object.create()

建立一個新對象,使用現有的對象來提供新建立的對象的__proto__對象

Object.create(proto, [propertiesObject])

proto
新建立對象的原型對象。
propertiesObject
可選。若是沒有指定爲 undefined,則是要添加到新建立對象的可枚舉屬性(即其自身定義的屬性,而不是其原型鏈上的枚舉屬性)對象的屬性描述符以及相應的屬性名稱。這些屬性對應Object.defindProperties()的第二個參數。繼承

Object.defineProperty()

該方法直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 並返回這個對象。ip

Object.defineProperty(obj, prop, descriptor)

obj
要在其上定義屬性的對象。
prop
要定義或修改的屬性的名稱。
descriptor
將被定義或修改的屬性描述符。原型鏈

Object.defineProperty(obj, "key", {
  enumerable: false,
  configurable: false,
  writable: false,
  value: "static"
});

Object.defineProperties()

直接在一個對象上定義新的屬性或修改現有屬性,並返回該對象。字符串

Object.defineProperties(obj, props)
var obj = {};
Object.defineProperties(obj, {
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }
  // etc. etc.
});

Object.is()

Object.is() 判斷兩個值是否相同。若是下列任何一項成立,則兩個值相同:get

  • 兩個值都是 undefined
  • 兩個值都是 null
  • 兩個值都是 true 或者都是 false
  • 兩個值是由相同個數的字符按照相同的順序組成的字符串
  • 兩個值指向同一個對象
  • 兩個值都是數字而且原型

    - 都是正零 +0
    - 都是負零 -0
    - 都是 NaN
    - 都是除零和 NaN 外的其它同一個數字

這種相等性判斷邏輯和傳統的 == 運算符所用的不一樣,== 運算符會對它兩邊的操做數作隱式類型轉換(若是它們類型不一樣),而後才進行相等性比較,(因此纔會有相似 "" == false 爲 true 的現象),但 Object.is 不會作這種類型轉換。

這與===運算符也不同。===運算符(和==運算符)將數字值-0和+0視爲相等,並認爲Number.NaN不等於NaN。

Object.keys(),Object.values(),Object.entries()

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]
}

Object.getPrototypeOf()

返回指定對象的原型(內部[[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
相關文章
相關標籤/搜索