簡體   English   中英

為什么 for...in 循環中的變量是一個字符串?

[英]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.keysObject.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM