在Javascript中设置具有短路评估的字符串时不期望的行为

时间:2015-08-19 16:13:48

标签: javascript logical-operators short-circuiting

我想使用此短路评估来报告单个班轮中多个项目的良好状态。但结果并不像预期的那样如下所示:

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?

2 个答案:

答案 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

之上