现在的位置: 首页 > 综合 > 正文

JavaScript中的比较操作符

2017年12月12日 ⁄ 综合 ⁄ 共 1402字 ⁄ 字号 评论关闭

用了一段时间的JavaScript,总是感觉这门语言非常不严谨,其中一个很难完全搞懂的地方就是比较操作符。这几天重翻JavaScript -- The Definitive Guid,做个摘要,加深理解。

JavaScript中的类型

null:一个类型只有一个值【虽然typeof(null)返回的是’object’,但它的类型仍然不是object】

undefined:一个类型只有一个值

number:数字

string:字符串

boolean:布尔值,有true和false两个值

object:key-value的集合,比如Array,String,Boolean,Date等

前五种被称为primitive值。

 

A === B

如果A和B类型不同,则为false

否则,如果A和B都是null,则为true

否则,如果A和B都是undefined,则为true

否则,如果A和B都是boolean,则按照boolean进行比较,

否则,如果A和B至少有一个是NaN,则为false,

否则,如果A和B都是number,则按照number方式比较,

         +0=== -0,

         +Infinity === +Infinity,

         -Infinity === -Infinity,

         +Infinity !== -Infinity

否则,如果A和B都是string,则按照整数数组的方式进行比较,

否则,A和B一定都是object,如果A和B指向同一个对象,则为true,否则为false,

 

A == B

如果A和B类型相同,按照A === B方式比较

否则,如果A和B一个是null,一个是undefined,则为true,

否则,如果A和B一个是number,一个是string,则把string转换为number,重新比较,

否则,如果某一个是true,则把true转换为1,重新比较,

否则,如果某一个是false,则把false转换为0,重新比较,

否则,如果A和B一个是object,另一个是number或string,把object转化为primitive,重新比较。

否则,返回false。

< > <= >=

以上运算符只能用于number和number、string和string之间的比较。

A < B

1.如果A和B有object,首先把object转换为primitive,再重新比较。

2.如果A和B都是string,则进行string比较。

3.如果A和B有任一个不是string,则把A和B转换成number,重新比较。

4.如果A和B都是number,则按照number的方式比较,并且注意以下:

         +0和-0是相等的

         Infinity大于任意非Infinity的number

         -Infinity小于任意非-Infinity的number

         如果操作符中有NaN,则总是返回false

 

另外,A <= B 等价于 !(A > B),与A==B和A===B的结果无关。

 

其它

object转化为primitive的规则,有些混乱,见JavaScript-- The Definitive Guide 3.8.3

计算string op number时,如果op为==或===或<或<=或>或>=,总是把string转换为number

计算string + number是,把number转换为string。

抱歉!评论已关闭.