您的位置:首页 > Web前端 > JavaScript

理解JS中 ===和!==运算符

2011-08-24 14:12 288 查看
本篇就浅议 == 、!= 来,颇析其中的奥秘,以此来加深自己对代码的理解能力。

一、 ==, != 运算符
JS中 ==,!=运算符具有环境计算的功能。 在一般的程序设计语言中,== 运算符比较的是两个值字面量是否确实相等 或两个引用是否指向同一个对象时才相等,比如:
var a = 1;
var b = 1;
alert( a == b) // 相等
var obj1 = new Object();
var obj2 = obj1;
alert( obj1 == obj2); //相等
就此看来一切很好,这也和强类型语言的判断标准一致, 如果以此就认为对它的认识结束了,固步自封的话,那我们的确错了,记住,JavaScript是弱类型的语言,弱类型语言和强类型语言的最大区别就在于弱类型语言比较松散,它能在不同的环境中把自己包装成满足环境计算的能力。比如说在bool环境中 它能把自身转换成bool值,哪怕本身是string类型,如:
var a = "123";
var b = 123;
alert( a == b ); //a和b相等? 答案是:相等, 为了完成计算,a转换成了数值123
var a = true;
var b = 1;
alert( a != b); //a和b不相等? 答案是:相等, 为了完成计算,a转换成了数值1

由此可以总结出:
==或!== 运算符在运算的时候,会根据环境进行类型转换,哪怕类型不相同,只要转换后的值能相等,那么它们就相等,否则就不相等。
二、=== ,!== 运算符
理解了上面 == 运算符的比较规则,那么就比较好理解 === 运算符的比较规则了,===或!== 在比较值相等性时不进行类型转换。也称为恒等运算符,即语意上要严格相等或严格不相等。
如:
var a = "123"
var b = 123
alert( a==b );//true 进行了类型转换所以相等
alert( a===b);// false 不进行类型转换所以不相等
所以恒等运算符在进行比较时,只有类型相同,值相同才可能相等,两者却一不可。

三、几个特殊的测试
alert( null == undefined) ; true
alert( null === undefined); false
alert( undefined == undefined); true
alert( undefined === undefined); true
alert( NaN == NaN); false

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: