javascript三元运算符错误

时间:2014-03-03 15:06:59

标签: javascript

当三元运算符的行为与我预期的不同时,我很困惑。这是我的代码:

function zeroCol() {
    var arr = []
    for (var i = 0; i <= 5; i++) {
        (i % 2 == 0) ? arr.push(0) : arr.push(1)

        return arr.join(" ")
    }
}
console.log(zeroCol())

它打印0而不是我预期的01010。但这可以使用if / else,为什么?

if(i%2==0) arr.push(0) 
arr.push(1);

3 个答案:

答案 0 :(得分:2)

好像你在for循环的第一次迭代后返回。这可能就是它只打印0的原因。它只执行一次三元运算符。

答案 1 :(得分:2)

让您的生活更轻松,将其删除:

function zeroCol() {
    var arr = [];
    for (var i = 0; i <= 5; i++) {
        arr.push(i % 2);
    }
    return arr.join(" ")
}

请注意return会停止该函数,因此请将其置于for循环之外。

要构建dfsq's comment,请注意此函数在当前状态下无效。实际上,循环的限制和除数都是硬编码的。因此,我们已经知道其结果:"0 1 0 1 0 1"。允许用户将这些值作为参数传递给函数可能会更有趣,如下所示:

function zeroCol(divisor, howMany) {
    var arr = [];
    for (var i = 0; i < howMany; i++) {
        arr.push(i % divisor);
    }
    return arr.join(' ')
}

用法示例:

zeroCol(2, 4) // "0 1 0 1"
zeroCol(3, 4) // "0 1 2 0"
zeroCol(4, 4) // "0 1 2 3"

答案 2 :(得分:0)

您的问题不在于运营商;你在循环内部返回,所以它在循环的第一次迭代后返回。将return语句放在循环之外:

function zeroCol(){
    var arr=[]
    for (var i=0;i<=5;i++){
        (i%2==0) ? arr.push(0) : arr.push(1);
    }

    return arr.join(" ");
}
console.log(zeroCol());