你必须记住的Javascript知识:布尔操作符之——逻辑非

布尔操作符:

布尔操作符一共有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高级程序设计(第三版)》

你可能感兴趣的:(布尔操作符,逻辑非,!,!!,NOT,JavaScript)