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

1 javascript

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

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

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

p.s*_*w.g 5

它被称为条件运算符.基本上,x ? y : z意味着if x是真,评估和返回y,否则评估和返回z.通过这种方式,它就像一个内联 - if/else陈述.

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

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

相当于:

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

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

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

条件运算符可以扩展为:

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