布尔操作符:
布尔操作符一共有3个:非(NOT)、与(AND)、或(OR)。
1.逻辑非:
逻辑非操作符由一个叹号( ! )表示,可以应用于 ECMAScript 中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。
逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反!
即,它遵循以下规则:
如果操作数是一个对象,返回 false ;
如果操作数是一个空字符串,返回 true ;
如果操作数是一个非空字符串,返回 false ;
如果操作数是数值 0 ,返回 true ;
如果操作数是任意非 0 数值(包括 Infinity),返回 false ;
如果操作数是 null ,返回 true ;
如果操作数是 NaN ,返回 true ;
如果操作数是 undefined ,返回 true ;
我们来看几个例子:
alert(!false); // true
alert(!''); // true
alert(!'gavin'); // false
alert(!2); // false
alert(!0); // true
alert(!null); // true
alert(!NaN); // true
alert(!undefined); // true
从上面的例子中我们可以看出:逻辑非操作符也可以用于将一个值转换为与其对应的布尔值。(如:alert(!false) // true)
扩展:同时使用两个逻辑非操作符
同时使用两个逻辑非操作符,实际上就会模拟 Boolean() 转型函数的行为。其中:
第一个逻辑非操作会基于无论什么操作数返回一个布尔值;
而第二个逻辑非操作则对该布尔值求反;
于是,就得到了这个值真正对应的布尔值。它最终结果与对这个值使用 Boolean() 函数相同。
我们来看几个例子:
alert(!false); // true
alert(!!false); // false
var str = 'gavin';
alert(!str); // false
if(!!str){// true
alert('字符串变量str不为空!')
};
var num = 12345;
alert(!num); // false
if(!!num){// true
alert('数值变量num不为空!')
};
alert(!NaN); // true
alert(!!NaN); // false
var obj = null;
alert(!obj); // true
alert(!!obj); // false
if(!!obj == false){
alert('对象变量obj的值为 null !')
}
var obj1;
alert(!obj1); // true
alert(!!obj1); // false
if(!!obj1 == false){
alert('对象变量obj1的值为 undefined !')
}
————以上知识点来源于《JavaScript高级程序设计(第三版)》