【问题标题】:Concatenate string with ternary operator in javascript [duplicate]在javascript中用三元运算符连接字符串[重复]
【发布时间】:2015-06-09 05:47:34
【问题描述】:

很烦

以下代码:

var arrays = [1,2,3];
alert('Array has ' + (arrays.length > 0) ? 'multiple':'single' + ' value');

警报为multiple,其中字符串未与三元结果连接

但是这段代码:

var arrays = [1,2,3];
alert('Array has ' + ((arrays.length > 0) ? 'multiple':'single') + ' value');

警报为Array has multiple value,其中字符串与三元结果连接。

我的问题是:

  1. 为什么第一个代码没有与字符串连接。
  2. 第一个代码中是否有任何语法错误,如果有,为什么它不会抛出错误。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    你的第一个例子是这样解析的

    alert(('Array has ' + (arrays.length > 0)) ? 'multiple':('single' + ' value'));
    

    鉴于+operator precedence 远高于?:

    【讨论】:

    • 答案真的太棒了。
    【解决方案2】:

    两个 sn-ps 在语法上都是正确的,但它们因运算符优先级而有所不同。三元运算符的优先级低于+

    在第一个sn-p中:

    var arrays = [1,2,3];
    alert('Array has ' + (arrays.length > 0) ? 'multiple':'single' + ' value');
    

    Javascript 计算第一部分'Array has ' + (arrays.length > 0),得到字符串'Array has true'。出于条件目的,非空字符串与true 相同(通常称为truthy 值)。因为三元运算符的第一个操作数是真值,所以整个表达式的值将是表达式'multiple' 的值,介于?: 之间。

    当你在第二个sn-p中添加参数时,你让三元运算符只接受(arrays.length > 0)作为它的条件。这就是代码按预期工作的原因。

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 2020-07-23
      • 2019-11-18
      • 2021-12-10
      • 2010-11-21
      • 2012-11-11
      • 2015-01-11
      相关资源
      最近更新 更多