Array.prototype[@@iterator]() - JavaScript 编辑
@@iterator
属性和 Array.prototype.values()
属性的初始值是同一个函数对象。
语法
arr[Symbol.iterator]()
返回值
数组的 iterator 方法,默认情况下,与 values()
返回值相同, arr[Symbol.iterator]
则会返回 values()
函数。
示例
使用 for...of 循环进行迭代
var arr = ['a', 'b', 'c', 'd', 'e'];
var eArr = arr[Symbol.iterator]();
// 浏览器必须支持 for...of 循环
for (let letter of eArr) {
console.log(letter);
}
另一种迭代方式
var arr = ['a', 'b', 'c', 'd', 'e'];
var eArr = arr[Symbol.iterator]();
console.log(eArr.next().value); // a
console.log(eArr.next().value); // b
console.log(eArr.next().value); // c
console.log(eArr.next().value); // d
console.log(eArr.next().value); // e
Use Case for brace notation
The use case for this syntax over using the dot notation (Array.prototype.values()
) is in a case where you don't know what object is going to be ahead of time. If you have a function that takes an iterator and then iterate over the value, but don't know if that Object is going to have a [Iterable].prototype.values method. This could be a built-in object like String object or a custom object.
function logIterable(it) {
var iterator = it[Symbol.iterator]();
// 浏览器必须支持 for...of 循环
for (let letter of iterator) {
console.log(letter);
}
}
// Array
logIterable(['a', 'b', 'c']);
// a
// b
// c
// string
logIterable('abc');
// a
// b
// c
规范
规范名称 | 规范状态 | 备注 |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Array.prototype[@@iterator]() | Standard | 首次定义 |
ECMAScript (ECMA-262) Array.prototype[@@iterator]() | Living Standard |
浏览器兼容性
BCD tables only load in the browser
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.参见
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论