JavaScript布尔表达式中的多个比较运算符
Multiple comparison operators in a JavaScript boolean expression
我试图检查变量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) {
以保证这两个条件都是真实的。
演示: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");
}
演示:http://jsfiddle.net/kn6M4/1/
将测试更改为
if (x > y && y > z){
当您编写(x > y > z)
时,这相当于((x>y)>z)
,因此您正在比较布尔值(x>y)
和z
。在本测试中,true
被转换为不大于2
的1
。
您想要
if(x > y && y > z){
alert("x > y > z"); //Nothing happens!
}
Javascript将尝试从左到右解析原始语句,最终将z与布尔值进行比较,然后将布尔值解析为数字(0或1(。
所以你最初的声明相当于
if( (x > y && 1 > z) || (x <= y && 0 > z))
相关文章:
- 字符串为零的JavaScript比较运算符
- JavaScript 比较运算符中的不一致
- 使用空数组时比较运算符 JavaScript 的奇怪行为
- 比较运算符 !== 与 0
- 比较运算符在 javascript 中的数组上比较什么
- 将 JavaScript 比较运算符与变量一起使用
- 有没有办法使比较运算符成为变量
- JavaScript 比较运算符不起作用
- JavaScript 比较运算符未正确评估用户输入
- 我以前从未见过的比较运算符
- 链接数学比较运算符时javascript的奇怪行为
- 在条件中使用逻辑运算符和比较运算符(javascript)
- 使用“”对字符串进行排序;小于/大于“;比较器中的比较运算符
- 比较运算符-大于或等于-不工作
- Javascript 比较运算符 != vs !==.
- jQuery/Javascript的比较运算符"==="和“= =”
- JavaScript布尔表达式中的多个比较运算符
- Javascript:使用逻辑运算符和比较运算符
- js中的比较运算符.erb文件
- Javascript比较运算符顺序