什么“?”在JavaScript中的for循环参数中意味着什么?

时间:2014-01-27 21:15:06

标签: javascript

我正在寻找获得数字最大素数因子的解决方案,并找到了一个有效的脚本,但?循环中有一个for(问号)。我想知道?做了什么?

<script type="text/javascript">
    n=317584931803;
    for(i=2;n>1;n%i?i++:(n/=i,document.write(i+' ')));
</script>

而且,如果您还可以解释这个脚本究竟是做什么的,我会很感激。

2 个答案:

答案 0 :(得分:5)

它被称为conditional operator。基本上,x ? y : z表示如果x为真,则评估并返回y,否则评估并返回z。通过这种方式,它就像内联if/else - 声明。

在这种情况下,我们可以像这样分解您的代码:

n=317584931803;
for(i=2;n>1;n%i?i++:(n/=i,document.write(i+' ')));

相当于:

var n=317584931803;
for (var i=2; n>1; n % i ? i++ : (n /= i, document.write(i + ' '))) {
    // do nothing
}

但是这个for循环可以更清楚地写成while循环:

var n=317584931803, i = 2;
while (n > 1) {
    n % i ? i++ : (n /= i, document.write(i + ' ');
}

条件运算符可以扩展为:

var n=317584931803, i = 2;
while (n > 1) {
    if (n % i > 0) {
        i++;
    } else {
        n = n / i;
        document.write( i + ' ');
    }
}

答案 1 :(得分:4)

它被称为Conditional Operator (?:)

完整表达

 test ? expression1 : expression2

如果test条件为真,则expression1将被评估,否则expression2

这是你的表达

 n % i ? i++ : (n /= i, document.write(i + ' '))