【问题标题】:What does "?" mean in the parameters of a for loop in JavaScript? [duplicate]“?”是什么意思? JavaScript中for循环的参数是什么意思? [复制]
【发布时间】:2014-02-18 22:31:50
【问题描述】:

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

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

而且,如果您还可以解释这个脚本的具体作用,我将不胜感激。

【问题讨论】:

标签: javascript


【解决方案1】:

它被称为conditional operator。基本上,x ? y : z 表示如果x 为真,则评估并返回y,否则评估并返回z。这样,它就像一个内联if/else-statement。

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

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 + ' ');
    }
}

【讨论】:

    【解决方案2】:

    它叫Conditional Operator (?:)

    完整的表达式是

     test ? expression1 : expression2
    

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

    这是你的表情

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

    【讨论】:

    • 停止称其为“三元”运算符。
    • @zerkms 但它是一个三元运算符en.wikipedia.org/wiki/%3F%3A
    • @zerkms - 为什么?如果我查找ternary,它会返回这个确切的构造作为示例。 en.wikipedia.org/wiki/Ternary_operation
    • @Justin Warkentin:当以一种语言引入另一个三元运算符时,您会遇到很多术语问题。为什么不从一开始就遵循正确的命名?
    • @zerkms 不管怎样,它被广泛称为“三元运算符”。到目前为止,我不知道任何其他三元运算符。当那个神奇的日子以一种流行的语言出现时,我相信我们会用它们的专有名称来区分它们。从技术上讲,“条件运算符”也不是那么明确。
    猜你喜欢
    • 2015-07-15
    • 2018-07-17
    • 2011-04-16
    • 1970-01-01
    • 2014-07-28
    • 2013-09-26
    • 2017-06-11
    • 2020-10-27
    • 2012-08-13
    相关资源
    最近更新 更多