JS基本概念 -- 操作符 -- 布尔操作符
布尔操作符一共有三个: 非(Not)、与(AND)、或(OR)
- 逻辑非逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值。无论这个值是什么类型,这个操作符都会返回一个布尔值。逻辑非操作符首先将他的操作数转换为一个布尔值,再对其求反。
//1.如果操作数是一个对象,返回false var o = { name: "ss" }; alert(!o); //false var o1 = {}; alert(!o1); //false //2.如果操作数是一个空字符串,返回true var str1 = ""; alert(!str1); //true //3.如果操作数是一个非空字符串,返回false var str2 = "name"; alert(!str2); //false //4.如果操作数值是0,返回true var num = 0; alert(!num); //true //5.如果操作数是任意非0数值(包括Infinity),返回false var num1 = 23; alert(!num1); //false var num2 = Number.MAX_VALUE * Number.MAX_VALUE; alert(!num2); //false //6.如果操作数是null,返回true var str3 = null; alert(!str3); //true //7.如果操作数是NaN,返回true var str4 = "ccc"; str4++; alert(str4); //NaN alert(!str4); //true //8.如果操作数是undefined,返回true var val; alert(val); //undefined alert(!val);//true
逻辑非操作符也可用于将一个值转换为与其对应的布尔值。而同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数的行为。最终结果与对这个值使用Boolean()函数相同。
alert(!!"blue"); //true alert(!!0); //false alert(!!NaN); //false alert(!!""); //false
- 逻辑与
逻辑与操作符由两个和号(&&)
逻辑与属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。对于逻辑与操作而言,如果第一个操作数是false,则无论第二个操作数是什么值,结果都不在可能是true。
var found = true; var result = (found && someUndefinedVariable); //这里会发生错误 alert(result); //这一行不会执行 //上述代码会发生错误,因为变量someUndefinedVariable没有声明。由于found的值是true,所以逻辑与操作符会继续对后面的变量求值。 var found1 = false; var result1 = (found1 && someUndefinedVariable); alert(result1); //false
- 逻辑或
逻辑或操作符由两个竖线符号( || )表示,有两个操作数。
逻辑或操作符也是短路操作,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了。
var found = false; var result = (found || someUndefinedVariable); //这里会发生错误 alert(result); //这一行不会执行 //上述代码会发生错误,因为变量someUndefinedVariable没有声明。由于found的值是false,所以逻辑与操作符会继续对后面的变量求值。 var found1 = true; var result1 = (found1 || someUndefinedVariable); alert(result1); //true
我们可以利用逻辑或的这一行为来避免为变量赋null 或 undefined值。
var preferrdObject; var backupObject = "ccc" var myObject = preferrdObject || backupObject; alert(myObject); //ccc /* *变量myObject将被赋予等号后面两个值中的一个。变量preferrdObject会优先赋给myObject值。 *变量backupObject负责在preferrdObject中不包含有效值的情况下提供后备值. *如果preferrdObject的值不是null,那么将他的值赋给myObject *如果preferrdObject的值是null,则将backupObject的值赋给myObject */