[[Put]] 被觸發(fā)時话原,實際的行為取決于許多因素坑雅,包括對象中是否已經(jīng)存在這個屬性(這是最重要的因素)
如果存在這個屬性,[[Put]] 算法會大致檢查下面這些內(nèi)容:
- 屬性是佛是訪問描述符?如果是并且存在 setter 就調(diào)用 setter疗疟。
- 屬性的數(shù)據(jù)描述符中 writable 是否是 false程帕?如果是住练,在非嚴格模式下靜默失敗,在嚴格模式下拋出 TypeError 異常愁拭。
- 如果都不是讲逛,將該值設(shè)置為屬性的值。
如果對象中不存在這個屬性岭埠,[[put]] 操作會更加復(fù)雜盏混。
for...in 遍歷的是對象中所有可枚舉屬性,你需要手動獲取屬性值
屬性的特性可以通過屬性描述符來控制惜论,比如 writable 和 configurable许赃。此外,可以使用 Object.preventExtensions(...)馆类、Object.seal(..) 和 Object.freeze(..) 來設(shè)置對象的不可變性級別混聊。
可以使用 ES6 中 for...of 來遍歷數(shù)據(jù)結(jié)構(gòu)(數(shù)組、對象乾巧,等等)中的值句喜,for...of 會尋找或者自定義的 @@iterator 對象并調(diào)用它的 next() 方法來遍歷數(shù)據(jù)值僵闯。