9

変数 y が x より小さく z より大きいかどうかを確認しようとしていますが、このブール式は何らかの理由で false を返します。JavaScript ではブール式をこのように簡潔に記述できますか? もしそうなら、正しい構文は何ですか?

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

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

3 に答える 3

10

論理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");
}

デモ: http://jsfiddle.net/kn6M4/1/

于 2013-05-20T18:33:11.630 に答える
7

あなたがしたい

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

Javascript は元のステートメントを左から右に解析しようとし、最終的に z をブール値と比較して、数値 (0 または 1) に解析します。

したがって、元のステートメントは次と同等です

if( (x > y && 1 > z) || (x <= y && 0 > z))
于 2013-05-20T18:33:31.330 に答える
6

テストを次のように変更します

if (x > y && y > z){

と書く(x > y > z)と、これは と同等なので、ブール値を((x>y)>z)と比較しています。このテストでは、 は に変換されますが、これは より大きくありません。(x>y)ztrue12

于 2013-05-20T18:33:14.873 に答える