首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数为条件的Javascript循环

函数为条件的Javascript循环
EN

Stack Overflow用户
提问于 2013-11-16 02:53:45
回答 3查看 3.5K关注 0票数 4

我的理解是,虽然条件为真,但会执行while循环的内容。在研究一本令人敬畏的O‘’Riely书中的一个例子时,我遇到了this循环的这个实现.

代码语言:javascript
复制
window.onload = function(){

    var next, previous, rewind; //  globals

    (function(){
        //  Set private variables
        var index = -1;
        var data = ['eeny', 'meeny', 'miney', 'moe'];
        var count = data.length;

        next = function(){
            if (index < count) {
                index ++;
            };
            return data[index];
        };

        previous = function(){
            if (index <= count){
                index --;
            }
            return data[index];
        };

        rewind = function(){
            index = -1;
        };

    })();

    //  console.log results of while loop calling next()...
    var a;
    rewind();
    while(a = next()){
        //  do something here
        console.log(a);
    }


}

我想我在想,为什么在这段代码中,while循环不能无限地解析为true?函数next()在var索引停止增量(++)后不会返回false,对吗?控制台不应该只输出eeny,meeny,miney,moe,moe.....etc.

我知道这可能是以某种形式提出的,但是已经做了搜索,找不到一个问题或答案来解释如何使用while (a = function()) {// do something}和这个循环是如何在一次遍历数组之后停止的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-16 02:56:05

关于为什么while (a = next()) {/*do something*/}不无限重复,关键在于被强迫为false --参数在接受while循环测试之前被转换为布尔值。强迫虚假的东西包括0-0undefinednull""NaN,当然还有false本身。

当您分配某个东西时,它会返回赋值本身的值。例如,如果您这样做:

代码语言:javascript
复制
var a;
console.log(a = '1234567890abcdefghijklmnopqrstuvwxyz');

它将记录1234567890abcdefghijklmnopqrstuvwxyz

next执行index++时,这会增加data数组中元素索引的计数器。这意味着每次运行next()函数时,它都会查找数据数组中的下一个元素--如果没有更多的元素,它将返回undefined,从而结束循环。

例如,请参见以下内容:

代码语言:javascript
复制
var index = 0;
data = ['a','b','c'];
data[index]; // 'a'
index++;
data[index]; // 'b'
index++;
data[index]; // 'c'
index++;
data[index]; // undefined - if passed this will coerce to false and end the loop
Boolean(data[index]); // false
票数 3
EN

Stack Overflow用户

发布于 2013-11-16 02:56:53

代码语言:javascript
复制
if (index < count) {
    index ++;
};

indexcount - 1时,这仍然会将index更改为count,对吗?countdata.length。因此,它就这样做了:

代码语言:javascript
复制
return data[index];

变成

代码语言:javascript
复制
return data[data.length];

由于数组的长度超出了数组的界限(它们是基于零的),它将给出undefined

代码语言:javascript
复制
while(a = next()){

会变成

代码语言:javascript
复制
while(a = undefined){

因为undefined是一个假值,所以不会输入循环。

票数 1
EN

Stack Overflow用户

发布于 2013-11-16 02:59:37

不,

它不会是一个无限的循环。while循环基本上是遍历数组并输出它,当它位于数组的末尾时,它只返回false并退出循环。

这有点像;

代码语言:javascript
复制
foreach(a as nextArray)
{
//output
}

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20014061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档