标签:
布尔操作符一共有三个: 非(Not)、与(AND)、或(OR)
//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
*/
标签:
原文地址:http://www.cnblogs.com/PrajnaParamita/p/5830513.html