JavaScript ==与===
确定两个变量是否相等是编程中的一个非常重要的操作。
JavaScript提供了两组操作符:相等(==)——先转换再比较, 全等(===)——仅比较而不转换
JavaScript所有的类型比较无非在5种基本数据类型之间进行:Boolean, Number, String, Null, Undefined
首先来看前三种基本数据类型(Boolean, Number, String),它们三者之间可以进行六种结合。
当使用==操作符时,会有以下转换规则:
Number 与 Number --> Number
Number 与 Boolean --> Number
Number 与 String --> Number
Boolean 与 Boolean --> Number
Boolean 与 String --> Number
String 与 String --> String
综上:除String与String之间的比较,进行纯字符串之间的比较,其余五种情况均转换为Number再进行比较。
既然要转换为Number类型再进行比较,我们来看其转换规则,将其它类型转换为Number类型,用的是转换函数Number(),转换规则如下:
Boolean: true -->1 , false --> 0
Null: null --> 0
Undefined: undefined --> NaN
Number: Number --> Number
String: 如果只包含数字,则转换为相应数字,如‘123’ --> 123
如果字符串为空,则转换为0, ‘’ --> 0
其实情况转换为 NaN
记住:NaN与任何值都不相等,包括NaN本身。
再来看余下的两个基本数据类型Null与Undefined,它们有以下规则:
null == undefined
null == null
undefined == undefined
除了以下三组比较相等外,null和undefined与任何其它值都不相等。
一些有趣的示例:
'' == '0' // false 0 == '' // true 0 == '0' // true false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true ' \t\r\n ' == 0 // true
再来看===
===再比较之前不进行数据类型转换,类型和值都要相等
如:‘55’ === 55 // false, 因为数据类型不相等
以下特殊情况:
null === undefined // true
NaN === NaN // false
+0 === -0 // true
总结:推荐使用===