【问题标题】:null value trips up loop空值跳闸循环
【发布时间】:2011-07-10 18:01:16
【问题描述】:

每次我将一个数组传递给这个函数时,当它遇到一个空值或未定义的值时,它就会停止循环。我不知道如何解决这个问题。当我询问循环中的当前项是 null 还是 undefined 还是 false 时,它​​没有回答...

function xul(func, loc, arr){
var elem;
var props = {};

for (var i = 0, len = arr.length; i < len; i++){
    if (arr[i] == undefined) {
        jsdump("undefined" + " - " + len);
    }
    else if (arr[i] == null) {
        jsdump("null" + " - " + len);
    }
    else if (arr[i] == false) {
        jsdump("false" + " - " + len);
    }
    else if (typeof arr[i] == "string"){
        elem = arr[i];
        if (typeOf(arr[i + 1]) == "object") {
            props = arr[i+1];
            i++;
        }
        loc = createNode(func, loc, elem, props);   
    }
    if (typeOf(arr[i + 1]) == "array") {
        xul("append", loc, arr[i+1]);
    } else {
        return loc;
    }   
}
}

这是怎么回事?

【问题讨论】:

  • 你确定数组本身不为空吗?
  • typeof 永远无法返回 array
  • 在最后一个 'if' 中,如果它是 undefined 或 null 它进入 else 并且 'return' 停止循环
  • @SLaks:啊,但他用的是typeOf,而不是typeof。 ;)
  • 非常正确的 typeOf 是我在旅行中发现的一个小功能......它只是一个普通的 typeof,但是它会检查它是否返回对象,你是否可以读取它的长度......如果你能数组!

标签: javascript arrays null for-loop undefined


【解决方案1】:

实际上循环在这里停止(如果你返回一些东西你退出循环!):

if (typeOf(arr[i + 1]) == "array") {
    xul("append", loc, arr[i+1]);
} else {
    return loc;
}  

如果下一个元素不是数组,则返回 loc 并停止循环。检查这个小提琴:http://jsfiddle.net/g8SVJ/ 它记录了两个 undefined 然后返回 loc

您还应该使用=== 而不是==

【讨论】:

  • 哈哈...我只是在自己的额头上扇了一巴掌...我不知道我是怎么错过的!
猜你喜欢
  • 1970-01-01
  • 2020-09-24
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多