我想使用此短路评估来报告单个班轮中多个项目的良好状态。但结果并不像预期的那样如下所示:
var items = [{
"id": 1,
"available": true
}, {
"id": 2,
"available": false
}, {
"id": 3,
"error": "Server not found for that TLD"
}];
items.forEach(function(item) {
console.log(item.id, item.error || item.available ? "Available" : "Not available");
});
这产生了以下日志:
1 "Available"
2 "Not available"
3 "Available"
在3
我希望它显示错误,因为item.error是一个字符串,应该评估为'true,为什么它会跳到item.available?
答案 0 :(得分:2)
item.error || (item.available ? "Available" : "Not available")
是真实的。
你需要括号:
{string} {printf("Token: %s Type: STRING \n", yytext); yylval.sval = strdup(yytext); return TOKEN_STRING;}
答案 1 :(得分:1)
正如@SLaks所说,括号将解决问题。操作顺序与您的预期不同。 ||在三元运算符之前进行评估。
您可以在此处查看订单。逻辑OR位于条件运算符https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
之上