【问题标题】:Question mark and colon in JavaScriptJavaScript 中的问号和冒号
【发布时间】:2010-12-18 19:28:36
【问题描述】:

我遇到了以下行

hsb.s = max != 0 ? 255 * delta / max : 0;

?: 在这种情况下是什么意思?

【问题讨论】:

    标签: javascript syntax operators conditional-operator


    【解决方案1】:

    它被称为Conditional Operator(即ternary operator)。

    格式为:condition ? value-if-true : value-if-false
    ? 视为“then”,将: 视为“else”。

    你的代码相当于

    if (max != 0)
      hsb.s = 255 * delta / max;
    else
      hsb.s = 0;
    

    【讨论】:

    • "?"不是三元运算符; "? :" 是三元运算符。谈“?”因为三元运算符就像谈论没有科斯特洛的雅培,没有哈代的劳雷尔,没有冲的奇奇......
    • 好吧,好吧...现在我使用了一个模棱两可的代词,开心吗? :)
    • 为了迂腐,它是 a 三元运算符,它恰好是大多数编程语言中唯一的一个。任何对 3 个部分起作用的运算符都是三元运算符,就像 addition 是对前后表达式进行运算的二元运算符(例如 1+2 加号对 1 和 2 进行运算),或者否定是一元运算符 (例如 -x ,其中 x 的值被否定)。
    • @Davy8: 这个具体可以叫conditional-operator
    • 如果你想检查两个条件怎么办?
    【解决方案2】:

    为了清楚起见,适当加括号,它是

    hsb.s = (max != 0) ? (255 * delta / max) : 0;
    

    表示返回任一

    • 255*delta/max 如果最大值 != 0
    • 0 如果最大值 == 0

    【讨论】:

      【解决方案3】:

      用括号写成这样可能会更清楚一点:

      hsb.s = (max != 0) ? (255 * delta / max) : 0;
      

      它所做的是评估第一个括号中的部分。如果结果为真,那么 ? 之后的部分在 : 返回之前。如果为 false,则返回 : 后面的内容。

      【讨论】:

        【解决方案4】:
        hsb.s = max != 0 ? 255 * delta / max : 0;
        

        ? 是一个三元运算符。它的工作原理类似于 if: 结合使用

        != 表示不等于

        所以,这条线的长形式是

        if (max != 0) { //if max is not zero
          hsb.s = 255 * delta / max;
        } else {
          hsb.s = 0;
        }
        

        【讨论】:

          【解决方案5】:

          ?: 是else {}if(){} 问题的简写条件。 所以你的代码可以互换:

          if(max != 0){
                 hsb.s = 225 * delta / max
          }
          else {
                 hsb.s = 0
          }
          

          MDN - Conditional (Ternary) Operator

          【讨论】:

            【解决方案6】:

            ? :这不是三元运算符吗?

            var x= expression ? true:false

            【讨论】:

            • 这是它使用的一个例子,但实际上你的语句有一个更短的版本,对于那些你只想要 TRUE / FALSE 的情况:如果 'expression' 只是一些带有数字或字符串的变量它,“var x = !!expression”将使其成为布尔结果。
            【解决方案7】:

            您所指的称为ternary operator,它本质上是一个基本的if 条件检查,如果三元操作中的代码块有效,则可以编写它来执行操作,否则默认为回退.

            三元运算的写法如下:

            condition ? exprIfTrue : exprIfFalse
            
            • condition 一个表达式,其值用作条件。
            • exprIfTrue 一个表达式,如果条件计算为 truthy 值(等于或可以转换为真),则计算该表达式。
            • exprIfFalse 条件为falsy 时执行的表达式(即具有可以转换为假的值)。

            示例

            使用下面的给定函数,如果提供给函数的数字是偶数,则返回字符串Yes,否则返回No

            function isEven(num) {
                return (num % 2 == 0) ? "Yes" : "No";
            }
            
            console.log("2: " + isEven(2));
            console.log("3: " + isEven(3));

            说明

            上面的操作分解:

            • (num % 2 == 0) |这是一个简单的if 语句条件,用于检查括号内的表达式是否为真。
            • ? "Yes" 如果操作为真,则给定的字符串字面量会自动作为执行的结果返回。
            • : "No"这是该操作中的else子句,如果不满足条件则返回No

            【讨论】:

              【解决方案8】:

              注意这一点。尽管 -1 != true 和 -1 != false,但 A -1 的计算结果为 true。相信我,我已经看到了。

              所以

              -1 ? “真面”:“假面”

              评估为“真实的一面”

              【讨论】:

              • "在 JavaScript 中,truthy 值是在布尔上下文中计算时被认为是真的值。所有值都是真值,除非它们被定义为假(即,除了为 false、0、""、null、未定义和 NaN)。这就是为什么 -1 被评估为真。 (developer.mozilla.org/en-US/docs/Glossary/Truthy)
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-06-26
              • 1970-01-01
              • 1970-01-01
              • 2012-04-13
              • 2021-10-21
              • 2017-10-26
              • 2011-10-20
              相关资源
              最近更新 更多