let arr = [1, 2, 4]
let key = arr.keys();
console.log(key);
for (const k of key) {
console.log(k);
}
當我嘗試控制臺arr.keys()它向我展示時,我感到很困惑,undefined但如果其中沒有任何內容,那么我們如何能夠迭代顯示我的物件0 1 2。
uj5u.com熱心網友回復:
你說過
為什么它顯示空物件但仍然能夠迭代?
在標題中,但
當我嘗試安慰
arr.keys()它時,我感到很困惑向我展示undefined
在問題中。這些是非常不同的事情。它向您顯示一個空物件,而不是 undefined.
當您查看 from 的迭代器時keys,它沒有自己的任何屬性或方法,它從其原型中繼承了所有屬性或方法。因此,如果您使用的控制臺只顯示物件自己的屬性(就像 Stack Snippets 控制臺那樣),它看起來就像一個空物件。
但是它仍然有狀態(只是沒有將狀態存盤為“自己的”屬性),并且它仍然具有迭代器應該具有的方法(它從其原型繼承它們)。因此它實作了迭代器的“介面”并與for-of.
這是一個以相同方式作業的迭代器示例。這不是陣列迭代器的定義方式(雖然它不是一百萬英里),它只是一個沒有“自己的”屬性或方法的迭代器的例子,但它仍然是一個迭代器:
顯示代碼片段
function* iteratorForKeys(array) {
for (let i = 0; i < array.length; i) {
yield i;
}
}
let keys = iteratorForKeys(["a", "b", "c"]);
console.log(keys); // Empty object if you ignore the prototype
console.log(Object.getOwnPropertyNames(keys).length); // 0
console.log(Object.getOwnPropertySymbols(keys).length); // 0
console.log("Key values:");
for (const key of keys) {
console.log(key);
}
uj5u.com熱心網友回復:
它不顯示 undefined 它顯示
物件 [陣列迭代器] {},它不是未定義的而是一個迭代器物件,當您執行 arr.keys() 時,它只是使鍵 [0,1,2] 的迭代器,在簡單整數或字串數??組的情況下,索引作為例如鑰匙
const array = [34,45,67,89]
console.log(array[2]) // will print 67 as in current array at key 2 position it contains 67 value
如果要列印鍵而不是迭代器物件,可以使用此代碼示例
let arr = [1,2,4]
let key = arr.keys();
console.log(key); // will print iterator object i.e Object [Array Iterator] {}
console.log([...key]) //shows [0,1,2], iterator is converted to simple array which you can print
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342663.html
