为什么它显示空对象但仍然可以迭代?

why it show empty object but still able to iterator?

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.

你说过

why it show empty object but still able to iterator?

在标题中但

I'm getting confuse when I try to console arr.keys() it show me undefined

在问题中。这些是非常不同的事情。它显示了一个空的 object,not undefined.

当您查看 keys 中的迭代器时,它没有自己的任何属性或方法,而是从其原型继承了所有这些属性或方法。因此,如果您使用的控制台仅显示 object 自己的属性(就像 Stack Snippets 控制台那样),它看起来像一个空的 object.

但它仍然有状态(只是不是存储为“自己的”属性的状态),并且它仍然具有迭代器应具有的方法(它从其原型继承它们)。因此它实现了迭代器的“接口”并与 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);
}

它不显示 undefined 它显示

Object [Array Iterator] {}, its not undefined but a iterator object when you do arr.keys() it simply makes an iterator of keys [0,1,2], in case of Simple integer or string arrays, index work as keys for example

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