javascript操作符1——“==”,“!=”,“===”, “!==”

JS类型转换与比较
本文详细解析了JavaScript中两种比较操作符(==与===)的区别,重点介绍了它们在类型转换和比较过程中的行为差异,并通过具体示例展示了这些差异如何影响代码的执行结果。

      今天在写js时,判断一个节点的值(document.getElementById("id").value == 5)是否等于一个数值时,出现了alert(5 == "5");打印出true的情况。感觉比较奇怪,于是查阅了JavaScript高级程序设计,终于找到了原因:

 

      比较两个变量是否相等是编程中非常重要的一个基本操作。

      最早的ECMAScript中的相等操作和不等操作会在执行比较之前,先将对象转换成相似的类型。后来,有人提出了这种转换到底是否合理的质疑。最后,ECMAScript的解决方案就是提供两组操作符

      1. 相等和不相等 —— 先转换再比较

      2. 全等和不全等 —— 仅比较而不转换。

 

      1. 相等(==)和不相等(!=)

          这两个操作符都会先转换操作数(通常称为强制转换),然后再比较它们的相等性

          在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则:

          a. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值 —— false转换为0,而true转换为1。

          b. 如果有一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值。(今天碰的就是)  

          c. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的原始值按照前面的规则进行比较。

alert(true == "1"); //打印出true
//先根据基本规则a,将true转换为数值1。
//然后根据基本规则b,将字符串转"1"换成数值1。

 

 

          这两个操作符在进行比较时则要遵循下列规则:

          a. null和underfined是相等的。(这个应该也比较常见)

          b. 要比较相等性之前,不能将null和undefined转换成其他任何值。

          c.  如果有一个操作数是NaN,则相等操作符返回false,而不相等操作符返回true。

               重要提示:即使两个操作数都是NaN,相等操作符也返回false;因为按照规则,NaN不等于NaN。

          d. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true;否则返回false。 

   

//特殊情况比较结果
null == undefined   //true                    true == 1             //true
"NaN" == NaN        //false                   true  == 2            //false 
5 == NaN                //false                   undefined == 0   //false
NaN == NaN           //false                    null == 0             //false
NaN != NaN            //true                     "5" == 5              //true
false == 0               //true

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      2. 全等(===)和全不等(!==)

          除了在比较之前不转换操作数之外,全等和全不等操作符与相等和不相等操作符没有什么区别。

          

//true,因为相等操作会进行强制转换
alert("55" == 55);         

 //false,因为全等操作不进行强制转换,它们是不同数据类型
 alert("55" === 55);       

      

       JavaScript高级程序设计中的原话:

       由于相等和不相等操作符存在类型转换问题,而为了保持代码中数据类型的完整性,我们推荐使用全等和不全等操作符。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值