在表达式中使用 ?: 附加到 Javascript 字符串会出现意外行为

Appending to a Javascript String using ?: in the expression behaves unexpectedly

var aString = "test ";

aString = aString + true?"Appended":"No Append";  // 'Appended'

其中

aString = aString + (true?"Appended":"No Append");// 'test Appended'

到底发生了什么?

第一种情况将true加到aString上,然后用三元校验。

基本就是这个带括号的操作

(aString + true) ? "Appended" : "No Append"

总体答案是 + 的运算符优先级高于 ?

var aString = "test ";

console.log(aString + true ? "Appended" : "No Append"); // 'Appended'
console.log((aString + true) ? "Appended" : "No Append"); // 'Appended'
console.log(aString + (true ? "Appended" : "No Append")); // 'test Appended'

我认为在这种情况下,aString + true 在表达式的其余部分之前被求值。

所以你得到

if(aString + true) {
    aString = "Appended";
}

你用括号固定,把它变成

if(true) {
    aString = aString + "Appended";
}

原因是javascript运算符优先级(look)