Javascript逻辑运算的返回值
2017-08-13 19:06
169 查看
之前一直以为逻辑运算符(&&、||、!)返回值就是true或false,其实不然。
知识点一:&&运算符有“短路”的行为,即如果&&的第一个运算数是false,就不再考虑第二个运算数;如果||的第一个运算数是true,也不再考虑第二个运算数。
知识点二:&&和||运算符两侧的运算数可以是变量(variable),也可以是关系表达式(expression),也可以是二者都有。
知识点三:在js逻辑运算中,变量运算数返回其本身的值,关系表达式运算数返回true或false。
知识点四:在js逻辑运算中,变量运算数如果是数字0、空字符串""、null、false、undefined、数字NaN,则会判定为false(注意此处是“判定”为false,并不是返回false)。
知识点五:逻辑运算的最后结果,是能够最终判定这次逻辑运算真假的那个运算数的返回值。
可能有点绕,看以下代码及分析就好理解了:
对于第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。
知识点一:&&运算符有“短路”的行为,即如果&&的第一个运算数是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); // abc console.log(num&&str); // 0 console.log(str&&num); // 0 console.log(num&&bo1);// 0 console.log(num||bo1);// true console.log(num||bo2);// false console.log(num<1||str); // true console.log(num&&str=="abc"); // 0 console.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。
相关文章推荐
- python逻辑运算的返回值
- javaScript逻辑与操作符运算规则
- javascript的||和&&逻辑运算
- 你不知道的JavaScript(八)逻辑运算
- javascript 的比较运算与逻辑运算
- javaScript逻辑或操作符运算规则
- JavaScript的Boolean逻辑运算探究
- 你不知道的JavaScript(八)逻辑运算
- JavaScript中的逻辑运算操作对象
- 你不知道的JavaScript(八)逻辑运算
- JavaScript中的逻辑运算的返回值(逻辑与&&,逻辑或||,逻辑非!)
- javascript中 逻辑运算
- JavaScript中的 逻辑运算 又称boolean运算
- JavaScript中的逻辑与运算、逻辑或运算
- javascript逻辑(&& ||)运算
- (转)JavaScript中的逻辑运算的返回值(逻辑与&&,逻辑或||,逻辑非!)
- javaScript初级逻辑运算或且真假命题
- JavaScript中的逻辑与运算、逻辑或运算
- JavaScript 基础(1)ECMAScript(基础语法)——语法、数据类型、基本运算和逻辑运算
- javascript里函数提升与逻辑运算