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

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);

最佳答案

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

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"

关于javascript - javascript三元运算符错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22150184/

10-12 16:20