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

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

2013-10-09 09:39 447 查看
本篇就浅议 == 、!= 来,颇析其中的奥秘,以此来加深自己对代码的理解能力。

一、 ==, != 运算符

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