0

重複の可能性:
とは !! JavaScript の (そうではない) 演算子?

$.grep..... の Jquery ライブラリ ソース コード

grep: function( elems, callback, inv ) {

    var retVal,
        ret = [],
        i = 0,
        length = elems.length;
    inv = !!inv;

    // Go through the array, only saving the items
    // that pass the validator function
    for ( ; i < length; i++ ) {
        retVal = !!callback( elems[ i ], i );
        if ( inv !== retVal ) {
            ret.push( elems[ i ] );
        }
    }

    return ret;
},

上記の例は、jquery ライブラリのソース コードに対する jquery grep です。彼が inv をデフォルトとして作成する理由は未定義であり、ブール値に変更し、同じことretValを!!callbackに保存してブール値に変更します。問題は、if ステートメントがどのように機能するかです...?? 詳細な説明を教えてください..!! ありがとう。

        retVal = !!callback( elems[ i ], i );
        if ( inv !== retVal ) {
            ret.push( elems[ i ] );
        }
4

1 に答える 1

1

!オペランドをブール値に強制し、その逆を返す単項演算子です。それらのうちの2つをまとめると(!!)、ブール値に強制され、二重に否定されたオペランドが得られます-これはブール表現です。はるかに理解しやすいため、ほとんどの人が好んで使用Boolean(val)します。!!val

// this calls "callback" and converts the return value to a boolean
retVal = !!callback( elems[ i ], i );
// if the converted return value is not identical to "inv" then... 
if ( inv !== retVal ) {
    // elems[i] is pushed on to the top of the array "ret"
    ret.push( elems[ i ] );
}

との両方がブール型であることを知っているため、条件inv !== retValも記述できることに注意してください。inv != retValinvretVal

于 2012-10-05T12:47:18.953 に答える