我不明白为什么
1)'https://api.rest.com/v1/users/' + userId + '/resource/'
2)resourceId ? resourceId : ''
两者都正确评估。

但是,当我尝试对一行进行评估时:
'https://api.rest.com/v1/users/' + userId + '/resource/' + resourceId ? resourceId : ''

它仅导致对第二个原始表达式(2)的求值。

这是什么原因呢?

最佳答案

这称为运算符优先级。字符串连接的优先级高于三元运算符。

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

解析三元:


条件子句:'https://api.rest.com/v1/users/' + userId + '/resource/' + resourceId
1.1:依次使用解析级联模式¹
如果子句:resourceId
其他条款:''


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

¹每个优先级都有多种模式,例如*,&&,===等。

关于javascript - 为什么两个JavaScript字符串表达式的计算结果相差不大,但它们却不能正确计算?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47442123/

10-10 14:36