标签:
逻辑运算符通常用于布尔值的操作,一般和关系运算符配合使用,有三个逻辑运算符:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)。
一、逻辑与(AND) :&&
var box = (5 > 4) && (4 > 3) //true,两边都为 true,返回 true
如果两边的操作数有一个操作数不是布尔值的情况下,与运算就不一定返回布尔值,此时,遵循已下规则:
1.第一个操作数是对象,则返回第二个操作数;
2.第二个操作数是对象,则第一个操作数返回 true,才返回第二个操作数,否则返回 false;
3.有一个操作数是 null,则返回 null;
4.有一个操作数是 undefined,则返回 undefined。
var box = {} && (5 > 4); //true,返回第二个操作数 var box = (5 > 4) && {}; //[object Object] var box = (3 > 4) && 对象; //false var box = (5 > 4) && null; //null var box = null && (5 > 4); var box = undefined && (5 > 4);//undefined var box = (5 > 4) && undefined;//同上
逻辑与运算符属于短路操作,顾名思义,如果第一个操作数返回是 false,第二个数不管是 true 还是 false 都不再运算直接返回的 false。
var box = true && age; //出错,age 未定义 var box = false && age; //false,不执行 age 了
二、逻辑或(OR):||
var box = (9 > 7) || (7 > 8); //true,两边只要有一边是 true,返回 true
如果两边的操作数有一个操作数不是布尔值的情况下,逻辑与运算就不一定返回布尔值,此时,遵循已下规则:
1.第一个操作数是对象,则返回第一个操作数;
2.第一个操作数的求值结果为 false,则返回第二个操作数;
3.两个操作数都是对象,则返回第一个操作数;
4.两个操作数都是 null,则返回 null;
5.两个操作数都是 NaN,则返回 NaN;
6.两个操作数都是 undefined,则返回 undefined;
var box = {} || (5 > 3); //[object Object] var box = (5 > 3) || {}; //true var box = {} || {} ; //[object Object] var box = null || null; //null var box = NaN || NaN; //NaN var box = undefined || undefined; //undefined
和逻辑与运算符相似,逻辑或运算符也是短路操作。当第一操作数的求值结果为 true,就不会对第二个操作数求值了。
var box = true || age; //true var box = false || age; //出错,age 未定义
我们可以利用逻辑或运算符这一特性来避免为变量赋 null 或 undefined 值。
var box = oneObject || twoObject; //把其中一个有效变量值赋给 box
三、逻辑非(NOT):!
逻辑非运算符可以用于任何值。无论这个值是什么数据类型,这个运算符都会返回一个布尔值。它的流程是:先将这个值转换成布尔值,然后取反,规则如下:
1.操作数是一个对象,返回 false;
2.操作数是一个空字符串,返回 true;
3.操作数是一个非空字符串,返回 false;
4.操作数是数值 0,返回 true;
5.操作数是任意非 0 数值(包括 Infinity),false;
6.操作数是 null,返回 true;
7.操作数是 NaN,返回 true;
8.操作数是 undefined,返回 true;
var box = !(5 > 4); //false var box = !{}; //false var box = !‘‘; //true var box = !‘Lee‘; //false var box = !0; //true var box = !8; //false var box = !null; //true var box = !NaN; //true var box = !undefined; //true
使用一次逻辑非运算符,流程是将值转成布尔值然后取反。而使用两次逻辑非运算符就是将值转成成布尔值取反再取反,相当于对值进行 Boolean()转型函数处理。
var box = !!0; //false var box = !!NaN; //false
标签:
原文地址:http://www.cnblogs.com/LO-ME/p/3580987.html