我正在寻找获得数字最大素数因子的解决方案,并找到了一个有效的脚本,但?
循环中有一个for
(问号)。我想知道?
做了什么?
<script type="text/javascript">
n=317584931803;
for(i=2;n>1;n%i?i++:(n/=i,document.write(i+' ')));
</script>
而且,如果您还可以解释这个脚本究竟是做什么的,我会很感激。
答案 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)
完整表达
test ? expression1 : expression2
如果test
条件为真,则expression1
将被评估,否则expression2
这是你的表达
n % i ? i++ : (n /= i, document.write(i + ' '))