Boolean() 函数、相等和不相等(== 和 !=)、逻辑非操作符(!)

来源:互联网 发布:计量型数据 编辑:程序博客网 时间:2024/06/06 06:42

Boolean() 函数、相等和不相等(== 和 !=)、逻辑非操作符(!)这三类放在一起经常会弄混,所以今天特地做一总结和比较。

(以下内容摘自《 JavaScript 高级程序设计(第三版)》)


1、Boolean() 函数

Boolean 类型是 ECMAScript 中使用得最多的一种类型,该类型只有两个字面值:true 和 false。

一般在流控制语句里需要使用 Boolean 类型,所以在流控制语句里会自动执行相应的 Boolean 转换,将非 Boolean  类型的数据类型转换成 Boolean 类型,比如 if 语句、while 语句里条件判断。 下表给出各种数据类型及其对应的转换规则。

数据类型转换为 true 的值转换为 false 的值BooleantruefalseString任何非空字符串“” (空字符串)Number任何非零数字值0 和 NANObject任何对象nullUndefinednot application (不适用)undefined


2、逻辑非操作符(!)

逻辑非操作符由一个叹号(! )表示,可以应用于 ECMAScript 中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。也就是说,逻辑非操作符遵循下列规则: 

  • 如果操作数是一个对象,返回 false; 
  • 如果操作数是一个空字符串,返回 true; 
  • 如果操作数是一个非空字符串,返回 false; 
  • 如果操作数是数值 0,返回 true; 
  • 如果操作数是任意非 0 数值(包括 Infinity) ,返回 false; 
  • 如果操作数是 null,返回 true; 
  • 如果操作数是 NaN,返回 true; 
  • 如果操作数是 undefined,返回 true。 
下面几个例子展示了应用上述规则的结果: 
 
alert(!false);       // true 
alert(!"blue");      // false 
alert(!0);           
// true 
alert(!NaN);         // true 
alert(!"");          // true 
alert(!12345);       
// false 
 
逻辑非操作符也可以用于将一个值转换为与其对应的布尔值。而同时使用两个逻辑非操作符,实际上就会模拟 Boolean()转型函数的行为。其中,第一个逻辑非操作会基于无论什么操作数返回一个布尔值,而第二个逻辑非操作则对该布尔值求反,于是就得到了这个值真正对应的布尔值。当然,最终结果与对这个值使用 Boolean()函数相同,如下面的例子所示:

alert(!!"blue");      //true 
alert(!!0);          //false 
alert(!!NaN);        
//false 
alert(!!"");          //false 
alert(!!12345);      //true 


3、相等和不相等( == 和 != )

ECMAScript 中的相等操作符由两个等于号(==)表示,如果两个操作数相等,则返回 true。而不相等操作符由叹号后跟等于号(!=)表示,如果两个操作数不相等,则返回 true。这两个操作符都会先转换操作数(通常称为强制转型) ,然后再比较它们的相等性。 
在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则: 

  • 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为 0,而true 转换为 1;
  • 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
  • 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法,用得到的基本类型值按照前面的规则进行比较; 

这两个操作符在进行比较时则要遵循下列规则。 

  • null 和 undefined 是相等的。 
  • 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值。 
  • 如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true。重要提示:即使两个操作数都是 NaN,相等操作符也返回 false;因为按照规则,NaN 不等于 NaN。 
  • 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true;否则,返回 false。 
下表列出了一些特殊情况及比较结果: 
 

表达式

null == undefined

true

"NaN" == NaN

false

5 == NaN

false

NaN == NaN

false

NaN != NaN

true

false == 0

true

true == 1

true

true == 2 

false

undefined == 0

false

null == 0

false

"5"==5

true

在此处需要注意的是,相等与不相等不是先将操作数转换成Boolean类型。另外,undefined、 null  与 0 不相等。 



0 0
原创粉丝点击