[英]Why is the variable in a for…in loop a string?
我使用 for...in 循環來記錄值,我注意到 for...in 循環中的變量(在本例中為i
)是一個字符串。
for (var i in ['a', 'b', 'c']) { console.log(i, typeof i) }
我在標題為“for-in、for-of 和 for-await-of 語句”的部分搜索了ECMAScript 規范,以獲取有關此內容的任何信息,但找不到任何有關此內容的信息。
我的問題是,規范中是否有關於此的任何內容,如果沒有,為什么它是一個字符串?
for..in調用EnumerateObjectProperties ,它執行:
返回一個 Iterator 對象 (26.1.1.2),其 next 方法迭代 O的可枚舉屬性的所有字符串值鍵。 ECMAScript 代碼永遠無法直接訪問迭代器對象。 枚舉屬性的機制和順序沒有指定,但必須符合下面指定的規則。
所有對象屬性都是字符串或符號。 甚至可以像數字一樣設置和檢索的數組屬性也被解釋為字符串(並在通過for..in
或其他屬性枚舉方法(如Object.keys
或Object.getOwnPropertyNames
)檢索時作為字符串檢索)。 你還可以看到[[OwnPropertyKeys]]()
,它說:
返回的 List 的每個元素的 Type 是 String 或 Symbol。
例如,使用Array.prototype.push
,您可以看到:
5. For each element E of items, do:
a. Perform ? Set(O, ! ToString(len), E, true).
屬性分配總是導致設置一個字符串或符號的屬性。 (參見isPropertyKey
-如果 Type(argument) 是 String,則返回 true。如果 Type(argument) 是 Symbol,則返回 true。否則返回 false。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.