【发布时间】:2013-05-20 18:32:15
【问题描述】:
我正在尝试检查变量 y 是否小于 x 且大于 z,但是这个布尔表达式由于某种原因返回 false。 JavaScript 是否允许像这样简洁地编写布尔表达式?如果是这样,正确的语法是什么?
x = 2;
y = 3;
z = 4;
if(x > y > z){
alert("x > y > z"); //Nothing happens!
}
【问题讨论】:
标签: javascript
我正在尝试检查变量 y 是否小于 x 且大于 z,但是这个布尔表达式由于某种原因返回 false。 JavaScript 是否允许像这样简洁地编写布尔表达式?如果是这样,正确的语法是什么?
x = 2;
y = 3;
z = 4;
if(x > y > z){
alert("x > y > z"); //Nothing happens!
}
【问题讨论】:
标签: javascript
尝试使用逻辑 and 运算符:
if (x > y && y > z) {
保证两个条件都为真。
演示: http://jsfiddle.net/3sxvy/
如果你需要把它放到一个函数中,你可以试试:
function compareNumbers(direction) {
var inOrder = (function () {
if (direction === "desc") {
return function (current, before) {
return current <= before;
};
} else if (direction === "asc") {
return function (current, before) {
return current >= before;
};
}
})();
var valid = true;
for (var i = 2; i < arguments.length; i++) {
if (!inOrder(arguments[i], arguments[i-1])) {
valid = false;
break;
}
}
return valid;
}
if (compareNumbers("desc", 33, 5)) {
console.log("Good");
} else {
console.log("Bad");
}
【讨论】:
你想要
if(x > y && y > z){
alert("x > y > z"); //Nothing happens!
}
Javascript 将尝试从左到右解析您的原始语句,您最终会将 z 与一个布尔值进行比较,然后将其解析为一个数字(0 或 1)。
所以你原来的陈述相当于
if( (x > y && 1 > z) || (x <= y && 0 > z))
【讨论】:
if(true > z) {,这没有任何意义。使您的示例更简洁的相同机制不允许使用像 var x = y || z || g; 这样的东西,这比语法糖有更大的好处。
将您的测试更改为
if (x > y && y > z){
当您编写(x > y > z) 时,这相当于((x>y)>z),因此您将布尔值(x>y) 与z 进行比较。在这个测试中,true 被转换为1,它不大于2。
【讨论】: