Javascript逻辑运算的返回值

来源:互联网 发布:尤克里里和吉他知乎 编辑:程序博客网 时间:2024/05/18 02:31

之前一直以为逻辑运算符(&&、||、!)返回值就是true或false,其实不然。


知识点一:&&运算符有“短路”的行为,即如果&&的第一个运算数是false,就不再考虑第二个运算数;如果||的第一个运算数是true,也不再考虑第二个运算数。

知识点二:&&和||运算符两侧的运算数可以是变量(variable),也可以是关系表达式(expression),也可以是二者都有

知识点三:在js逻辑运算中,变量运算数返回其本身的值,关系表达式运算数返回true或false。

知识点四:在js逻辑运算中,变量运算数如果是数字0、空字符串""、null、false、undefined、数字NaN,则会判定为false(注意此处是“判定”为false,并不是返回false)。

知识点五:逻辑运算的最后结果,能够最终判定这次逻辑运算真假的那个运算数的返回值。


可能有点绕,看以下代码及分析就好理解了:

        var str="abc";var num=0;var bo1=true;var bo2=false;console.log(num||str); // abcconsole.log(num&&str); // 0console.log(str&&num); // 0console.log(num&&bo1);// 0console.log(num||bo1);// trueconsole.log(num||bo2);// falseconsole.log(num<1||str); // trueconsole.log(num&&str=="abc"); // 0console.log(num<1&&str=="abc"); // true

对于第6行,num和str都是变量,返回值分别为其本身的值0和“abc”,此次逻辑运算“num||str”的过程是这样的:首先num被判定为false,但因为是逻辑或运算,整个逻辑运算还不能确定是真是假,所以接下来判定str,结果为true,则整个式子判定为真,但为什么最终输出“abc”呢?根据上述第五条,因为str是最终判定这次逻辑运算真假的那个运算数,所以整个式子的最终结果是str的返回值,也就是“abc”。

对于第7行,num首先被判定为false,因为是逻辑与运算,有“短路”行为发生,所以无论str真假,整个逻辑运算都判定为假。这儿,num决定了这次逻辑运算的真假,所以最终返回了num的返回值,也就是0。 第9行也是一样的道理。

对于第8行,str首先被判定为true,因为是逻辑与运算,这时整个逻辑运算的判定结果就取决于第二个运算数num了,num判定为false,则整个逻辑运算的判定结果为假,但最终返回的是num的值0。

对于第13行“num<1||str”,num<1判定结果为真,返回结果为true(因为是关系表达式),往下走发现是||运算,则整个式子的判定结果已经由num<1确定,则返回num<1的返回结果,也就是true。

其它行的结果可以类推。


另:C++中的&&和||运算的运算数似乎不能同时为变量。可以是a>0||b,a-b>0&&b<-1,“love”||12这种,不能是a||b,a&&b这种。且如果最终判定为true,则返回1,最终判定为false,则返回0。

原创粉丝点击