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

Not expected behavior while setting a string with short-circuit evaluation in Javascript

我想用这个短路评估来报告一个班轮中多个项目的良好状态。但是结果并不像预期的那样:

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?

item.error || item.available是真的。

你需要括号:

item.error || (item.available ? "Available" : "Not available")

正如@SLaks 所说,括号将解决问题。操作顺序与您预期的不同。 ||在三元运算符之前求值。

您可以在此处查看订单。逻辑或就在条件运算符https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

之上