Javascript中字符串上逻辑运算符的用途

时间:2010-11-05 06:13:58

标签: javascript string jqgrid operators

我偶然发现了一些我希望有人可以向我解释的代码。

这用于jqGrid。

的上下文中
onSelectRow: function(id){ 
     if(id && id!==lastsel){ 
          jQuery('#rowed3').jqGrid('restoreRow',lastsel);
          jQuery('#rowed3').jqGrid('editRow',id,true); 
          lastsel=id; 
     } 
}, 

为什么在javascript中的字符串上使用逻辑运算符,如上所示?这只是一个错误还是这里有一些我不理解的功能?

代码取自http://trirand.com/blog/jqgrid/rowedex3.html

完整示例http://trirand.com/blog/jqgrid/jqgrid.html>行编辑>使用事件

3 个答案:

答案 0 :(得分:5)

变量应该是数字,但是条件可以以任何方式工作。


if(id && id !== lastsel)


  1. 第一个id说它必须有一个值。该值也必须是真实的。如果值不是 truthy ,则值为 falsy ,这意味着它不能是以下之一(从{{3借来) }}):

    • false
    • null
    • undefined
    • 空字符串''
    • 数字0
    • 数字NaNNaN的类型为数字)


    注意:您会在JavaScript中看到与true相同的比较,特别是对于/ while循环:

    /*1*/ while(id){...} // while id is true, do something
    /*2*/ for(;id;){...} // same thing, without the incrementation or variable definition
    



  2. 第二部分是说id不能等于lastsel ,这是最后使用的id。 !==在JavaScript中很特殊,这意味着它必须比较值和类型,而!=只是比较值:

    • a == ba的值等于b
    • 的值
    • a != ba的值不等于b
    • 的值
    • a === ba的值等于b的值,a的类型等于b
    • 的类型
    • a !== ba的值不等于b的值,a的类型不等于b的类型

  3. 修改


    另外,如果你在括号中看到它,可能有助于思考表达式:
    if( (id) && (id !== lastsel) )

答案 1 :(得分:1)

好吧,为什么不呢?

(id) && (id !== lastsel)    // parentheses added for logical emphasis

这说if (id is trueish) and (not equal to lastsel)。 “真实”意味着它不是falseundefined或其他任何 falsy if (id)相当于if (id == true)id不必是一个字符串(并且评论指出它可能永远不会是),并且这个检查确保它不是它不应该是的东西。它正在检查变量,而不是字符串。

答案 2 :(得分:0)

所以这就是说必须定义id并且不等于lastsel。