理解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 |
相关文章推荐
- js中得~~是什么意思/JS按位非(~)运算符与~~运算符的理解分析
- js中得~~是什么意思/JS按位非(~)运算符与~~运算符的理解分析
- 理解JS中 || 和 &&运算符
- 理解JS中 || 和 &&运算符
- JS按位非(~)运算符与~~运算符的理解分析
- JS按位非(~)运算符与~~运算符的理解分析
- JS基础篇--JS按位非(~)运算符与~~运算符的理解分析
- JS按位非(~)运算符与~~运算符的理解
- 理解JS中 ===和!==运算符
- JS按位非(~)运算符与~~运算符的理解分析
- JS按位非(~)运算符与~~运算符的理解分析
- 理解JS中 || 和 &&运算符
- js之constructor属性/instanceof运算符/原型的理解
- 理解JS中 || 和 &&运算符
- JS继承机制的深入理解--动态原型存在的问题与解决
- 理解js中的闭包
- 10 分钟理解 JS 引擎的执行机制
- 数据抓取中post与get方式的处理深入理解(不用给网页标签赋值也不用模拟提交js)
- js中(function(){…})()立即执行函数写法理解
- 理解js作用域原型链和执行上下文