Javascript中的”==”和”===”

对于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 …

原文地址:https://www.cnblogs.com/kerbin/p/5054711.html