JavaScript布尔表达式中的多个比较运算符
我试图检查变量y是否小于x且大于z,但由于某种原因,这个布尔表达式返回false。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) { 保证这两个条件都是真实的 演示: 如果需要将其放入
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中有不同的含义,太棒了!