我偶然发现了一些我希望有人可以向我解释的代码。
这用于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>行编辑>使用事件
答案 0 :(得分:5)
变量应该是数字,但是条件可以以任何方式工作。
if(id && id !== lastsel)
第一个id
说它必须有一个值。该值也必须是真实的。如果值不是 truthy
,则值为 falsy
,这意味着它不能是以下之一(从{{3借来) }}):
false
null
undefined
''
0
NaN
(NaN
的类型为数字)
注意:您会在JavaScript中看到与true
相同的比较,特别是对于/ while循环:
/*1*/ while(id){...} // while id is true, do something
/*2*/ for(;id;){...} // same thing, without the incrementation or variable definition
第二部分是说id不能等于lastsel ,这是最后使用的id。 !==
在JavaScript中很特殊,这意味着它必须比较值和类型,而!=
只是比较值:
a == b
:a
的值等于b
a != b
:a
的值不等于b
a === b
:a
的值等于b
的值,a
的类型等于b
a !== b
:a
的值不等于b
的值,a
的类型不等于b
的类型
另外,如果你在括号中看到它,可能有助于思考表达式:
if( (id) && (id !== lastsel) )
答案 1 :(得分:1)
好吧,为什么不呢?
(id) && (id !== lastsel) // parentheses added for logical emphasis
这说if (id is trueish) and (not equal to lastsel)
。 “真实”意味着它不是false
,undefined
或其他任何 falsy
。 if (id)
相当于if (id == true)
。 id
不必是一个字符串(并且评论指出它可能永远不会是),并且这个检查确保它不是它不应该是的东西。它正在检查变量,而不是字符串。
答案 2 :(得分:0)
所以这就是说必须定义id并且不等于lastsel。