为什么它显示空对象但仍然可以迭代?
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
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 meundefined
在问题中。这些是非常不同的事情。它显示了一个空的 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