[英]javascript ternary operator error
当三元运算符的行为与我预期的不同时,我感到困惑。 这是我的代码:
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);
好像您在for循环的第一次迭代之后返回了。 这可能就是为什么它只输出0的原因。它只执行一次三元运算符。
让您的生活更轻松,将其删除:
function zeroCol() {
var arr = [];
for (var i = 0; i <= 5; i++) {
arr.push(i % 2);
}
return arr.join(" ")
}
请注意, return
停止了该函数,因此,请将其置于for循环之外。
要构建dfsq的注释 ,请注意,此函数在当前状态下无用。 实际上,循环的极限和除数都是硬编码的。 因此,我们已经知道它的结果: "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"
您的问题与运营商无关; 您正在循环内返回,因此它是在循环的第一次迭代之后返回的。 将您的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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.