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

JavaScript布尔表达式中的多个比较运算符,javascript,Javascript,我试图检查变量y是否小于x且大于z,但由于某种原因,这个布尔表达式返回false。JavaScript允许像这样简洁地编写布尔表达式吗?如果是,正确的语法是什么 x = 2; y = 3; z = 4; if(x > y > z){ alert("x > y > z"); //Nothing happens! } 尝试使用逻辑和运算符: if (x > y && y > z) { 保证这两个条件都是真实的 演示: 如果需要将其放入

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

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

if(x > y > z){
    alert("x > y > z"); //Nothing happens!
}

尝试使用逻辑运算符:

if (x > y && y > z) {
保证这两个条件都是真实的

演示:

如果需要将其放入函数中,可以尝试:

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");
}
函数比较器(方向){
变量顺序=(函数(){
如果(方向==“描述”){
返回函数(当前、之前){
返回电流=之前;
};
}
})();
var valid=true;
for(var i=2;i
演示:

将测试更改为

if (x > y && y > z){
当您编写
(x>y>z)
时,这相当于
((x>y)>z)
,因此您将布尔值
(x>y)
z
进行比较。在本测试中,
true
被转换为
1
,该值不大于所需的
2

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((x>y&&1>z)| |(x z))

不幸的是,这并不像原文那么简洁。我希望JavaScript能够允许这种简洁的布尔表达式语法。是的,但它有一点工作的好处!我认为,最初的评估是从左到右的,这意味着一旦评估了第一个部分,下一个评估将是
if(true>z){
这毫无意义。让示例更简洁的相同机制不允许类似于
var x=y | | z | | g;
的东西,这比语法糖有更大的好处。@Ocelot20这是正确的,但JS实际上会将其转换为一个数字,因此它实际上相当于我的upda中的语句ted回答。哪一种有意义,但显然不是OP的本意。@ben336:对,我想“没有意义”的意思是,就像你说的,我的意思不是最初的意图。如果我能创建一个函数,它实际上能够解析像上面那样的“简明”布尔表达式,那就更好了。问题是你的“简明”表达式在JavaScript中有一个含义,但有一个不同的含义(见我的答案)。@AndersonGreen我不知道它是否有帮助,但我添加了一个函数,可以做与比较相同的事情(升序或降序),有尽可能多的数字传递给函数。它实际上只适用于相同升序/降序的数字。这个答案是最好的,因为它简洁,它给出了解决方案,并解释了OP使用的语法为什么有效,但在JS中有不同的含义,太棒了!