JavaScript布尔表达式中的多个比较运算符

And*_*een 4 javascript

我正在尝试检查变量y是否小于x且大于z,但是这个布尔表达式由于某种原因返回false.JavaScript是否允许像这样简洁地编写布尔表达式?如果是这样,那么正确的语法是什么?

x = 2;
y = 3;
z = 4;

if(x > y > z){
    alert("x > y > z"); //Nothing happens!
}
Run Code Online (Sandbox Code Playgroud)

Ian*_*Ian 7

尝试使用逻辑运算符:

if (x > y && y > z) {
Run Code Online (Sandbox Code Playgroud)

保证两个条件都是真的.

演示: 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");
}
Run Code Online (Sandbox Code Playgroud)

演示: http ://jsfiddle.net/kn6M4/1/


Den*_*ret 5

将您的测试更改为

if (x > y && y > z){
Run Code Online (Sandbox Code Playgroud)

当您编写 时(x > y > z),这等效于((x>y)>z),因此您将布尔值(x>y)与进行比较z。在这个测试中,true被转换为1,它不大于2


Ben*_*ick 5

你要

if(x > y && y > z){
    alert("x > y > z"); //Nothing happens!
}
Run Code Online (Sandbox Code Playgroud)

Javascript将尝试从左到右解析您的原始语句,您将最终将z与布尔值进行比较,然后将其解析为数字(0或1).

所以你的原始陈述相当于

if( (x > y && 1 > z) || (x <= y && 0 > z))
Run Code Online (Sandbox Code Playgroud)