鍍金池/ 問答/HTML/ 根據(jù)規(guī)定,所有開發(fā)人員定義的屬性都是可枚舉的該如何理解?

根據(jù)規(guī)定,所有開發(fā)人員定義的屬性都是可枚舉的該如何理解?

高程書p153頁有這樣一段話
在使用for-in循環(huán)時,返回的是所有能夠通過對象訪問的、可枚舉的屬性,既包括實例中的屬性又包括原型對象中的屬性;
屏蔽了原型中不可枚舉屬性(即將[[Enumerable]]設置為false的屬性)也會在for-in循環(huán)中返回,因為根據(jù)規(guī)定,所有開發(fā)人員定義的屬性都是可枚舉的---只有IE8即更早版本中例外

問題一:根據(jù)規(guī)定,所有開發(fā)人員定義的屬性都是可枚舉的該如何理解?

我在百度中搜索for…in是否可以返回不可枚舉的屬性時 看到的大部分關鍵句子如下
for in循環(huán)可以遍歷對象中所有可以枚舉的屬性,包括自有屬性和繼承屬性。

問題二:那么這里的可枚舉是不是指所有用戶自定義屬性而不是說enumerable特性設置為true的屬性?
是不是就算用戶將enumerable特性設置為false仍然是可枚舉屬性?

回答
編輯回答
骨殘心

回答一:emmm...根據(jù)這個片段的理解,它只是想強調用戶自定義的屬性或方法默認都是可枚舉的,哪怕原型中有一個與自定義屬性同名 的 不可枚舉屬性,舉個栗子:
圖片描述

圖片描述

回答二:用戶自定義屬性的enumerable默認為true,改為false滯后是否還能枚舉,樓主試下就知道啦~

2017年5月5日 05:04
編輯回答
半心人

自定義屬性默認是可枚舉的

var one = {b:2}
Object.defineProperty(one, "a", {
  value : 1,
  writable : true,
  configurable: true,
  enumerable: false
})
for (var key in one) {
  console.log(key + '---' + one[key]) //b---2

如果像上面代碼將enumerable特性設成false,for..in就無法遍歷到指定屬性了

2018年6月17日 15:37
編輯回答
壞脾滊

這句話要理解的話從下面三個方面來就可以了:
前提:

原型中的默認屬性為不可枚舉。用戶定義屬性均為可枚舉。

問題:

若用戶自定義一個與原型中相同的屬性,那這個屬性可以枚舉嗎,題主問題中那句話說了:會屏蔽掉原先的不可枚舉屬性成為一個可枚舉的屬性。

理由:

2能成立的原因是所有開發(fā)者定義的屬性都是可枚舉的,即使若該屬性與原型中不可枚舉屬性的屬性相沖突。
2017年9月14日 03:42
編輯回答
毀與悔

問題1:只是說明用戶自定義的屬性默認都是可枚舉的 也就是說你不做任何特性設置時 你可以吧它循環(huán)出來
問題2:系統(tǒng)默認可枚舉你改成了不可枚舉當然就不可枚舉了

因為你寫了個屬性還得手動設置可枚舉會很奇怪 所以規(guī)定開發(fā)任用定義的默認可枚舉
而你自己定義的屬性你都設置了不可枚舉了 還可枚舉那也很奇怪
只是一個默認值問題

2018年1月22日 06:40