JavaScript中的&&与||的用法(不用在判断布尔值上)

文章推薦指數: 80 %
投票人數:10人

如题所述,JavaScript中&&和||可以用在普通的语句中,但是具体没有理解透它们的机制,求讲解,谢谢!类似这样var orResult = a || b|| c;var ... 注册登录问答专栏课程招聘活动发现✓使用“Bing”搜本站使用“Google”搜本站使用“百度”搜本站站内搜索注册登录首页问答javascript问答详情1JavaScript中的&&与||的用法(不用在判断布尔值上)hei_yu_fa876更新于2016-01-07如题所述,JavaScript中&&和||可以用在普通的语句中,但是具体没有理解透它们的机制,求讲解,谢谢!类似这样varorResult=a||b||c;varandResult=a&&b&&c;javascript关注13收藏13赞1回复阅读22.6k9个回答得票最新11interjc215更新于2016-01-07✓已被采纳 varx=a||b||c等价于: varx; if(a){ x=a; }elseif(b){ x=b; }else{ x=c; } varx=a&&b&&c等价于: varx=a; if(a){ x=b; if(b){ x=c; } } 赞11回复2公子36.6k更新于2016-01-07https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Logical_Operators赞2回复2PeckZeg712发布于2016-01-07 其实这种特性叫短路求值,&&会返回第一个假值(0,null,"",undefined,NaN),而||则会返回第一个真值。

所以&&有时候会用来代替if(expression)doSomething(),转成&&方式就是expression&&doSomething()。

而||比较用来在函数中设置默认值,比如 functiondoSomething(arg1,arg2,arg3){ arg1=arg1||'arg1Value'; arg2=arg2||'arg2Value'; } 不过还需要看具体的使用场景,就比如如果要求doSomething()传入的arg1为一个数值,则上面的写法就会出现问题(在传入0的时候被认为是一个假值而使用默认值)。

现在个人比较常用的方法只判断是否与undefined相等,比如 functiondoSomething(arg){ arg=arg!==void0?arg:0; } 赞2回复0resyu12更新于2016-01-07 机制就是根据布尔值返回起决定性作用的值 我只能说你举得栗子也是在判断!requestFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame 赞0回复0IMoons2发布于2016-01-07新手上路,请多包涵 你的问题表述不是特别清楚啊,是不是下面代码中||和&&使用的问题: varorResult=a||b; varandResult=a&&b; 如果是的话,运算结果如下(参考W3CSchool): &&操作结果 如果一个运算数是对象,另一个是Boolean值,返回该对象 如果两个运算数都是对象,返回第二个对象 如果某个运算数是null,返回null 如果某个运算数是NaN,返回NaN 如果某个运算数是undefined,发生错误 ||操作结果 如果一个运算数是对象,并且该对象左边的运算数值均为false,则返回该对象 如果两个运算数都是对象,返回第一个对象 如果最后一个运算数是null,并且其他运算数值均为false,则返回null 如果最后一个运算数是NaN,并且其他运算数值均为false,则返回NaN 如果某个运算数是undefined,发生错误 赞0回复0hei_yu_fa876发布于2016-01-07 逻辑与(&&)expr1&&expr2如果expr1能转换成false则返回expr1,否则返回expr2. 那如果这样的式子: d=a&&b&&c; 是不是就是,当a为false时,将a赋值给d,当a为true就判断b; 当b为false时,将b赋值给d,当b为true就直接将c赋值给d了 而不管c是true还是false 逻辑或(||)expr1||expr2如果expr1能转换成true则返回expr1,否则返回expr2. 那如果这样的式子: d=a||b||c; 是不是就是,当a为true时,将a赋值给d,当a为false就判断b; 当b为true时,将b赋值给d,当b为false就直接将c赋值给dl了 而不管c是true还是false 不知道我这样理解是不是正确的@公子 赞0回复0manxisuo10.7k发布于2016-01-07https://es5.github.io/#x11.11赞0回复0Fighting445发布于2016-01-07 逻辑判断的短路原则1、&&运算:a&&b;a如果为false了(空字符,0,null或undefined等),b就没必要计算了,结果肯定为false,直接返回a的值,因为&&运算符号要返回true要求运算符两边同时为true。

console.log(0&&1);//0console.log(null&&1);//nullconsole.log(2&&0&&1);//0console.log(2&&0&&...&&1);//0 2、||运算符:a||b;因为||运算符两边只要有一个为true,整个表达式的结果就为true了,当a为true时,b的计算已经无意义,所以直接返回a的值就ok了 console.log(0||1);//1console.log(null||1);//1console.log(2||0||1);//2console.log(2||1||0||...||1);//2 赞0回复0前端能吃么2发布于2017-12-06新手上路,请多包涵https://segmentfault.com/n/13...赞0回复撰写回答你尚未登录,登录后可以和开发者交流问题的细节关注并接收问题和回答的更新提醒参与内容的编辑和改进,让解决方法与时俱进注册登录宣传栏2255613



請為這篇文章評分?