物件的擴充套件

2022-07-26 20:57:16 字數 1974 閱讀 6522

1.物件的簡寫:

const foo = '

bar'

;const baz =;

baz

////

等同於const baz = ;

2.簡寫法:列印物件

let user =;

let foo =;

console.log(user, foo)//

console.log()

//, foo: }

console.log直接輸出userfoo兩個物件時,就是兩組鍵值對,可能會混淆。把它們放在大括號裡面輸出,就變成了物件的簡潔表示法,每組鍵值對前面會列印物件名,這樣就比較清晰了。

3.屬性名的表示式:

表示式作為屬性名,表示式需要放在方括號內。

若屬性名表示式如果是乙個物件,預設情況下會自動將物件轉為字串[object object]

所以,如果在同乙個物件裡有多個為物件的屬性名,如[keya]和[keyb]得到的都是[object object],[keyb]會把[keya]覆蓋掉,而最後只有乙個[object object]屬性。

4.屬性的可列舉性和遍歷

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

let obj = ;

object.getownpropertydescriptor(obj,

'foo')

//

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

目前,有四個操作會忽略enumerablefalse的屬性。

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

屬性的遍歷

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

(1)for...in

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

(2)object.keys(obj)

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

(3)object.getownprototypenames(obj)

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

(4)object.getownpropertysymbols(obj)

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

(5)reflect.ownkeys(obj)

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

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

物件的擴充套件

1.允許直接寫入變數和函式作為物件的屬性和方法。2.允許物件中只寫屬性名,不寫屬性值,屬性值就變數屬性名所代表的值。var date 2020 var o 定義物件的屬性名時,可以使用表示式,但必須放在方括號內。ps 屬性名表示式和簡潔表示式不能同時使用。let propkey foo let ob...

物件的擴充套件

1 屬性的簡潔表示法 es6 允許直接寫入變數和函式,作為物件的屬性和方法 簡潔表示法 變數 let o 1 let k 2 let es5 let es6 console.log es5,es6 簡潔表示法 函式 let es5 method let es6 method console.log ...

物件的擴充套件 02

解構賦值 物件的解構賦值,用於從乙個物件取值,相當於將所有可遍歷的,但尚未被讀取的屬性分配到指定物件上面。所有的鍵和它們的值都會複製到新物件上面 let x 1 y 2 z 由於解構賦值要求等號右邊是乙個物件,所以如果等號右邊是 undefined 或 null 就會報錯,因為他們無法轉為物件 le...