代码之家  ›  专栏  ›  技术社区  ›  elight

为什么两个单独计算的javascript字符串表达式不能正确地一起计算?[副本]

  •  1
  • elight  · 技术社区  · 7 年前

    我不明白为什么

    1) 'https://api.rest.com/v1/users/' + userId + '/resource/'

    2) resourceId ? resourceId : ''

    两者都正确评估。

    但是,当我试图在一行上进行评估时:

    'https://api.rest.com/v1/users/' + userId + '/resource/' + resourceId ? resourceId : ''

    它只会计算第二个原始表达式(2)。

    原因是什么?

    2 回复  |  直到 7 年前
        1
  •  4
  •   André Werlang    7 年前

    它叫 运算符优先级 . 字符串串联比三元运算符具有更高的优先级。

    解析器理解表达式 'https://api.rest.com/v1/users/' + userId + '/resource/' + resourceId ? resourceId : '' 作为:

    解析三元:

    1. 条件条款: 'https://api.rest.com/v1/users/' + userId + '/resource/' + resourceId 1.1:这反过来使用解析连接模式
    2. 如果条款: resourceId
    3. Else条款: ''

    提示:组合表达式时,例如,使用括号消除运算符的歧义 'https://api.rest.com/v1/users/' + userId + '/resource/' + (resourceId ? resourceId : '') .

    每个优先级都有模式,如*、&&,==,等

        2
  •  0
  •   stackuser83    7 年前

    线路是什么

    'https://api.rest.com/v1/users/' + userId + '/resource/' + resourceId ? resourceId : ''
    

    does是连接三元运算符之前的所有内容,然后评估该运算结果是否真实(它是),然后返回三元运算符的真实分支结果。

    Andre的回答建议使用括号来获得预期的操作顺序,这样可以保留单行格式。