[英]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){
alert("x > y > z"); //Nothing happens!
}
Javascript將嘗試從左到右解析您的原始語句,您將最終將z與布爾值進行比較,然后將其解析為數字(0或1)。
所以你的原始陳述相當於
if( (x > y && 1 > z) || (x <= y && 0 > z))
將測試更改為
if (x > y && y > z){
當你寫(x > y > z)
,這相當於((x>y)>z)
,所以你要將布爾值(x>y)
與z
。 在此測試中, true
轉換為1
,不大於2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.