论坛首页 Web前端技术论坛

js中的逻辑与&&和逻辑或||

浏览 2856 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-11-15  

 

该文属于原创,原文出自http://www.pm-road.com/index.php/2014/09/13/102/

之前有一个同事去面试,面试过程中碰到这样一个问题:

在js中写出如下的答案 :

var a = 2;

var b = 3;

var andflag = a && b ;

var orflag = a || b;

问andflag 和orflag 分别是什么?

起初我认为: andflag 和orflag 的值都为 true; 毕竟 && 和 || 都是求Boolean ,后来发现,我错了。

答案应该是  andflag  = 3,orflag = 2;

原因是这样的:

在运算过程中,首先js  会将 && 和||  两边的值转成Boolean 类型,然后再算值 ,&&运算如果返回true,则取后面的值,如果|| 返回true,则取前面的值 , 而其中数值转换成boolean 的规则 是:

对象、非零整数、非空字符串返回true,

其它为false   ;

a && b  的运算就是  :因为  a  和  b全是非零整数,所以  a  和  b  也就是true ,而   true && true  返回   true   ,则取后面的b   ,同理  a 和b 全是非零整数,a  和b  全是true  ,则true || true  返回   true ,取|| 前面的值 也就是2;

 

同样:该逻辑运算符支持短路原则:

如 var  a = “”  ||  null  || 3  ||  4   —->    var a = fasel || false || true ||  true  结果为true  则返回第一个true,即是3

var b = 4 && 5 && null && 0   ——>   var b = true && true && false && false   结果是false   则返回第一个false   即是null .

   发表时间:2014-11-21  
a && b和 a || b,不管怎么样,取值的条件是布尔表达式结束时,最后计算的子表达式的值,就是整个布尔表达式的值;
在js中,a是undefined,a是null,a是0,那么就是false,其余都是true;

在面试题中:
var a = 2;
var b = 3;
var andflag = a && b ;
var orflag = a || b;

a和b都是true,由于&&运算要求觉得,当第一个自表达式为true,那么要计算后一个子表达式;a是true,自然要计算b;b是true,要计算后面的,后面没有了,b就是最后一个自表达式;那么b就是这个总表达式的值;

||运算来说,第一个a是true,没必要计算b的值,所以a是最后计算的自表达式,所以整个表达式的值就是a的值

var t = param || 10;通常这种方式可以用来给参数param设置默认值,但js的function中,param没传参数,或者为null,可以这样来设置默认值10。不过需要注意的是,如果param的值是0,而且有效,不能这样,因为这样设置,永远得不到param为false或者param为0的值。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics