在 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
之上
我想用这个短路评估来报告一个班轮中多个项目的良好状态。但是结果并不像预期的那样:
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
之上