为什么两个分开计算的javascript字符串表达式不能一起正确计算?

为什么两个分开计算的javascript字符串表达式不能一起正确计算?,javascript,ternary-operator,Javascript,Ternary Operator,我不明白为什么 1) 'https://api.rest.com/v1/users/“+userId+”/resource/”和 2) resourceId?资源ID:'' 两者都能正确评估 但是,当我尝试在一行上进行评估时: 'https://api.rest.com/v1/users/'+userId+'/resource/'+resourceId?资源ID:'' 它只会计算第二个原始表达式(2) 这是什么原因?它被称为运算符优先级。字符串串联比三元运算符具有更高的优先级 解析器理解表达式

我不明白为什么 1)
'https://api.rest.com/v1/users/“+userId+”/resource/”


2)
resourceId?资源ID:''


两者都能正确评估

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

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


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

这是什么原因?

它被称为运算符优先级。字符串串联比三元运算符具有更高的优先级

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

解析三元:

  • 条件子句:
    'https://api.rest.com/v1/users/“+userId+”/resource/“+resourceId
    1.1:这反过来使用解析连接模式
  • If子句:
    resourceId
  • Else子句:
    '
  • 提示:组合表达式时,请使用括号消除运算符的歧义,例如
    https://api.rest.com/v1/users/“+userId+”/resource/“+(resourceId?resourceId:”)

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

    称为运算符优先级。字符串串联比三元运算符具有更高的优先级

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

    解析三元:

  • 条件子句:
    'https://api.rest.com/v1/users/“+userId+”/resource/“+resourceId
    1.1:这反过来使用解析连接模式
  • If子句:
    resourceId
  • Else子句:
    '
  • 提示:组合表达式时,请使用括号消除运算符的歧义,例如
    https://api.rest.com/v1/users/“+userId+”/resource/“+(resourceId?resourceId:”)

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

    行是什么

    'https://api.rest.com/v1/users/' + userId + '/resource/' + resourceId ? resourceId : ''
    
    does是连接三元运算符之前的所有内容,然后将该运算结果求值为truthy或not(它是),然后返回三元运算符的真正分支结果

    Andre的回答建议您使用括号来获得预期的操作顺序,这将使您保持单行格式。

    行是什么

    'https://api.rest.com/v1/users/' + userId + '/resource/' + resourceId ? resourceId : ''
    
    does是连接三元运算符之前的所有内容,然后将该运算结果求值为truthy或not(它是),然后返回三元运算符的真正分支结果


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

    您不能只在字符串串联上加上三元条件。这不是它们的工作方式。使用括号这是关于运算符优先级的。为什么4+5=9和0*4+5不是相同的原因。你不能只是在字符串连接上加上三元条件。这不是它们的工作方式。使用括号这是关于运算符优先级的。同样的原因,为什么4+5=9和0*4+5不是。