在表达式中使用 ?: 附加到 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)
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)