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

Javascript中字符串上逻辑运算符的用途,javascript,string,jqgrid,operators,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; }

我偶然发现了一些代码,希望有人能给我解释一下

这在jqGrid的上下文中使用

onSelectRow: function(id){ 
     if(id && id!==lastsel){ 
          jQuery('#rowed3').jqGrid('restoreRow',lastsel);
          jQuery('#rowed3').jqGrid('editRow',id,true); 
          lastsel=id; 
     } 
}, 
为什么在javascript中对字符串使用逻辑运算符,如上所示?这仅仅是一个bug,还是这里有一些我不理解的功能

代码取自


完整示例>行编辑>使用事件

这意味着必须定义id,并且id不等于lastsel。

变量应该是numeri,但是,条件将以任何方式工作

ifid&&id!==拉塞尔 第一个id表示它必须有一个值。价值也必须是真实的。如果一个值不是虚假的,那么它就是真实的,这意味着它不能是从以下任何一个方面借用的:

错误的 无效的 未定义 空字符串 数字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,lastsel是最后使用的id。!==在JavaScript中是特殊的,这意味着它必须比较值和类型,而只是比较价值:

a==b:a的值等于b的值 a!=b:a的值不等于b的值 a===b:a的值等于b的值,a的类型等于b的类型 a!==b:a的值不等于b的值,a的类型不等于b的类型 编辑 此外,如果您在括号中看到表达式,则可能有助于思考该表达式: 如果id&&id!==拉塞尔

好吧,为什么不呢

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

这表示id是否真实且不等于lastsel。Trueish的意思是它不是虚假的,未定义的或任何其他虚假的。if id等于if id==true。id不必是字符串,正如注释所指出的,它可能永远不会是字符串,并且此检查确保它不是不应该是的。它检查的是一个变量,而不是一个字符串。

你在询问什么字符串?划船3号?lastsel和id看起来都是数字,最有可能的是一些sortid和id的整数,这就是我所质疑的id和id!==lastsel,而不是id&&id。如果id本身已经是一个非常好的条件。对答案编辑部分的小评论:!==具有更高的优先级,例如&&see和&&workleft-to-right。所以不需要括号。不需要括号。。。这只是一种逻辑思考的分组方式。我不知道我为什么说rtl,你是对的。可能是因为当时是凌晨3点到4点,我可能在想赋值运算符?优先级是这里的关键因素。我去掉了那一块+1没问题。我理解。有时,如果快速写一个答案,并与其他一些事情平行,很容易犯一些小错误。现在一切都已确定,这对以后阅读文本的其他人来说是更好的。祝你好运