ES6 物件的擴充套件 屬性的可列舉性和遍歷

2021-08-11 01:27:55 字數 1866 閱讀 8322

可列舉

物件的每乙個屬性都有乙個描述物件,用來控制該屬性的行為。object.getownpropertydescriptor 方法可以獲取該屬性的描述物件。

let obj = ;

object.getownpropertydescriptor(obj, 'foo')

//

描述物件的 enumerable 屬性,稱為「可沒舉性」,如果該屬性為 false,就表示某些操作會忽略當前屬性。

目前,有四個操作會忽略 enumerable 為 false 的屬性。

這四個操作之中,前三個是 es5 就有的,最後乙個 object.assign() 是es6 新增的,其中,只有 for...in 會返回繼承的屬性,其他三個方法都會忽略繼承的屬性,只處理物件自身的屬性。實際上,引入「可列舉」(enumerable)這個概念的最初目的,就是讓某些屬性可以規避掉 for...in 操作,不然所有內部屬性都會被遍歷到。比如,物件原型的 tostring 方法,以及陣列的 length 屬性,就通過「可列舉性」,從而避免被 for...in 遍歷到。

object.getownpropertydescriptor(object.prototype, 'tostring').enumerable

// false

object.getownpropertydescriptor(, 'length').enumerable

// false

上面**中,tostring 和 length 屬性的 enumerable 都是 false,因此 for...in 不會遍歷到這兩個繼承自原型的屬性。

另外,es6 規定,所有 class 的原型的方法都是不可列舉的。

object.getownpropertydescriptor(class }.prototype, 'foo').enumerable

// false

總的來說,操作中引入繼承的屬性會讓問題複雜化,大多數時候,我們只關心物件自身的屬性。所以,盡量不要用 for...in 迴圈,而用 object.key() 代替。

屬性的遍歷

es6 一共有5種方法可以遍歷物件的屬性。

1)for...in

for...in 迴圈遍歷物件自身的和繼承的可列舉屬性(不含 symbol 屬性)。

2)object.keys(obj)

object.keys 返回乙個陣列,包括物件自身的(不含繼承的)所有可列舉屬性(不含 symbol 屬性)的鍵名。

3)object.getownpropertynames(obj)

object.getownpropertynames 返回乙個陣列,包含物件自身的所有屬性(不含 symbol 屬性,但是包括不可列舉屬性)的鍵名。

4)object.getownpropertysymbols(obj)

object.getownpropertysymbols 返回乙個陣列,包含物件自身的所有 symbol 屬性的鍵名。

5)reflect.ownkeys(obj)

reflect.ownkeys 返回乙個陣列,包含物件自身的所有鍵名,不管鍵名是 symbol 或字串,也不管是否可列舉。

以上的5種方法遍歷物件的鍵名,都遵守統一的屬性遍歷的次序規則。

reflect.ownkeys()

// ['2', '10', 'b', 'a', symbol()]

上面**中,reflect.ownkeys 方法返回乙個陣列,包含了引數物件的所有屬性。這個陣列的屬性次序是這樣的,首先是數值屬性2和10,其次是字串屬性b和a,最後是 symbol 屬性。

es6 物件的擴充套件

新的物件字面量特性 01.方法的定義 可以簡寫,但使用箭頭函式要注意this指向 let obj obj show 02.屬性的簡寫 let name fang let obj 03.計算屬性名 屬性名可以使用變數或者表示式 letc name letd data letobj console lo...

ES6 物件的擴充套件

es6 允許直接寫入變數和函式,作為物件的屬性和方法。這樣的書寫更加簡潔。const foo bar const baz baz 等同於 const baz function f x,y 等同於 function f x,y f 1,2 object除了屬性簡寫,方法也可以簡寫。const o 等同...

es6物件的擴充套件

物件的擴充套件 屬性名表示式 字面量定義物件時使用定義鍵 prop 不能與上同時使用 方法的name屬性 返回方法函式名 屬性的可列舉性和遍歷 描述物件的enumerable 關鍵字 指向當前物件的原型物件 只能用在物件的簡寫方法中method 對比兩值是否相等 合併物件 淺拷貝 返回原物件 返回物...