我不明白为什么
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/