1.物件的簡寫:
const foo = 'bar'
;const baz =;
baz
////
等同於const baz = ;
2.簡寫法:列印物件
let user =;let foo =;
console.log(user, foo)//
console.log()
//, foo: }
console.log
直接輸出user
和foo
兩個物件時,就是兩組鍵值對,可能會混淆。把它們放在大括號裡面輸出,就變成了物件的簡潔表示法,每組鍵值對前面會列印物件名,這樣就比較清晰了。
3.屬性名的表示式:
表示式作為屬性名,表示式需要放在方括號內。
若屬性名表示式如果是乙個物件,預設情況下會自動將物件轉為字串[object object]
所以,如果在同乙個物件裡有多個為物件的屬性名,如[keya]和[keyb]得到的都是[object object],[keyb]會把[keya]覆蓋掉,而最後只有乙個[object object]屬性。
4.屬性的可列舉性和遍歷
物件的每個屬性都有乙個描述物件(descriptor),用來控制該屬性的行為。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
遍歷到。
屬性的遍歷
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...