如何在JS中实现

时间:2019-01-13 16:58:26

标签: javascript v8

我想知道for of是如何在JS中实现的,以及它在幕后如何工作。

根据MDNfor of在可迭代对象上循环。

我的问题是:对于具有 order 感的可迭代对象(如数组),循环时是否遵循该顺序?是否符合规格要求?如果可以按特定顺序排列元素,我可以依靠它还是应该使用for loop

我认为这取决于特定对象(在这种情况下为数组)对可迭代协议的实现,并且for of只是一个使用者,但是最终我还是找不到有关是否保留订单的任何具体信息。

顺便说一句,我主要在Chrome的V8中进行了一些测试,并且在循环遍历数组时似乎保留了顺序。

1 个答案:

答案 0 :(得分:3)

for of是在后台使用迭代器实现的。

This是一篇不错的简短文章,解释了迭代器的工作原理。

下面是一个自定义迭代器的示例,它可以帮助您了解其幕后工作原理。您需要实现一个# EMBEDDED SERVER CONFIGURATION (ServerProperties) server.port=8080 server.address= # bind to a specific NIC server.session-timeout= # session timeout in seconds server.context-path= # the context path, defaults to '/' server.servlet-path= # the servlet path, defaults to '/' server.tomcat.access-log-pattern= # log pattern of the access log server.tomcat.access-log-enabled=false # is access logging enabled server.tomcat.protocol-header=x-forwarded-proto # ssl forward headers server.tomcat.remote-ip-header=x-forwarded-for server.tomcat.basedir=/tmp # base dir (usually not needed, defaults to tmp) server.tomcat.background-processor-delay=30; # in seconds server.tomcat.max-threads = 0 # number of threads in protocol handler server.tomcat.uri-encoding = UTF-8 # character encoding to use for URL decoding 方法:

[Symbol.iterator]

您可以看到here,Array迭代器的const iterable = { [Symbol.iterator](){ let index = -1; const iter = { next(){ index++; if(index === 0) return {value: 'This is index 0', done: false} else if(index === 1) return {value: 'This is index 1!', done: false} else if(index === 2) return {value: 'This is index 2!!', done: false} else if(index === 3) return {value: 'This is index 3!!!', done: false} return {value: 'end', done: true}; } } return iter; } } const iterator = iterable[Symbol.iterator](); console.log(iterator.next()); // 0 console.log(iterator.next()); // 1 console.log(iterator.next()); // 2 console.log(iterator.next()); // 3 console.log(iterator.next()); // end方法是通过以下伪代码实现的:

enter image description here