変数 y が x より小さく z より大きいかどうかを確認しようとしていますが、このブール式は何らかの理由で false を返します。JavaScript ではブール式をこのように簡潔に記述できますか? もしそうなら、正しい構文は何ですか?
x = 2;
y = 3;
z = 4;
if(x > y > z){
alert("x > y > z"); //Nothing happens!
}
変数 y が x より小さく z より大きいかどうかを確認しようとしていますが、このブール式は何らかの理由で false を返します。JavaScript ではブール式をこのように簡潔に記述できますか? もしそうなら、正しい構文は何ですか?
x = 2;
y = 3;
z = 4;
if(x > y > z){
alert("x > y > z"); //Nothing happens!
}
論理and演算子を使用してみてください。
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");
}
あなたがしたい
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