我无法理解为什么
1)<form action="tag" autocomplete="on" method="POST">
<input id="search" name="search" type="text" placeholder="Search for tags...">
<input id="search_submit" name="submit-search" type="submit">
</form>
和
2)'https://api.rest.com/v1/users/' + userId + '/resource/'
都正确评估。
但是,当我尝试评估一行时:
resourceId ? resourceId : ''
它导致只评估第二个原始表达式(2)。
这是什么原因?
答案 0 :(得分:4)
它被称为运算符优先级。字符串连接的优先级高于三元运算符。
解析器将表达式'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 : '')
。
¹每个优先级都有模式,如*,&amp;&amp;,===等。
答案 1 :(得分:0)
该行
'https://api.rest.com/v1/users/' + userId + '/resource/' + resourceId ? resourceId : ''
确实是在三元运算符之前连接所有内容,然后将该运算结果计算为truthy或不是(它是),然后返回三元运算符的true分支结果。
Andre的答案建议您使用括号来获取您期望的操作顺序,这样可以保持单行格式化。