0

可能重复:
什么是!! JavaScript 中的(不是不是)运算符?

$.grep 的 Jquery 库源代码.....

grep:函数(元素,回调,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 grep 在 jquery 库的源代码上。为什么他将 inv 设为默认值是未定义的,他更改为布尔值,而retVal存储!!callback并更改为布尔值。问题是 if 语句如何工作......??可以给我一些更详细的解释..!! 谢谢。

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

1 回答 1

1

!是一元运算符,它将操作数强制为布尔值,然后返回相反的值。将它们中的两个放在一起(!!),你会得到一个被强制为布尔值和双重否定的操作数——它是布尔表示。大多数人更喜欢它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 != retVal因为我们都知道inv并且retVal是布尔类型,但是即使比较运算符可以使用,始终使用恒等运算符也是一个好习惯。

于 2012-10-05T12:47:18.953 回答