对于javascript中”==”和”===”的区别我想很多人都应该很清楚的,例子:
1==true //true
1===true //false
我们通常会对两个数据进行判断,在javascript中的”==”会带着一个隐式的强制转换,而”===”就是代表两个数据类型相等,数值也相等。因此,在对混合类型数据进行判断的时候,还是推荐使用”===”。
那么javascript中这个隐式的转换机制是怎样的呢?除了”null”,”undefined”之外,对于非Date类型的数据,javascript会优先尝试使用valueOf()的方法去判断相等,然后再使用toString()方法,而Date类型正好相反;我们再来看以下的例子:
null==undefined //true
null===undefined //false
“null==undefined”这个比较特别,事实上这个结果是true的;但是,它们并不会进行隐式强制转换,包括它们和其他类型数据比较也不会进行隐式强制转换。
值得一提的是null在运算时候的情况,我们来看一个例子:
alert(4+null)
这样的代码是不会报错的,运行的结果是4,因为null在运算的时候被隐式的转换成了0。因此在比较或者运算的时候要当心javascript的隐式强制类型转换。
另外再说一个事实:
var a=NaN; alert(a===a) //false
是的,NaN在javascript中是唯一不等于自身的数据,有时我们需要判断一个数据是否等于NaN,javascript中也提供了一个方法isNaN(),不过这个方法有一个局限,例:
alert(isNaN(new Object())); //true
alert(isNaN(“aaa”)); //true
这个就是isNaN()的局限之处,只有当我们确定数据类型是number的时候,才可以用isNaN();
那么怎么判断一个数据是否是NaN呢,我们可以这样(写法可能有点别扭):
if(a!==NaN){ }
javascript中判断一个变量是否等于的时候,我们通常这样写:
var a=”xxx”;
if(a==”xxx”){}
其实这样写是存在一个隐患的,而且是人为因素造成的,就是当我们写很多行代码的时候我们会不小心的把if(a==”xxx”)写成if(a=”xxx”)这样不但判断失效还改变了a的值,最麻烦的是这样的代码并不会报错,还顺利的执行了,以至于产生意外的结果。有时这样的错误是很难被发现。这里有个避免这样的错误的写法:
var a=”xxx”;
if(“xxx”==a){}
End …