`
javaanswer
  • 浏览: 5249 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类

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

阅读更多

      今天在写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高级程序设计中的原话:

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

 

分享到:
评论
1 楼 tangxuan1988 2011-11-26  
顶一个,AI友~

相关推荐

    JavaScript中的typeof操作符用法实例

    对一个值使用typeof操作符可能返回下列某个字符串:“undefined”——如果这个值未定义“boolean”——如果这个值是布尔值“string”——如果这个值是字符串“number”——如果这个值是数值“object”——如果这个是...

    JavaScript 布尔操作符解析 || !

    该操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。 下面说明下Boolean()转型函数的一组规则。 数据类型 转换为true的值 转换为false的值 Boolean true false String  任何非空字符串 “”(空...

    javascript运算符——位运算符全面介绍

    本文将介绍javascript中常常被忽视的运算符——位运算符 二进制表示  ECMAScript中的所有数值都以IEEE-754 64位格式存储,但位操作符并不直接操作64位的值,而是以32位带符号的整数进行运算的,并且返回值也是一个...

    javascript运算符——逻辑运算符全面解析

    前面的话 逻辑运算符对操作数进行布尔运算,经常和关系运算符一样配合使用。逻辑运算符将多个关系表达式组合起来组成一个更复杂的表达式。...而如果同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数的行

    laihuamin#JS-total#ES6系列——let和const深入理解1

    前言在ES6中多了两个变量定义的操作符——let和const,在现在项目中,ES6已经是不可获缺,我打算在掘金上整理一套ES6的系列,会收集常用的知识点,喜欢的

    JavaScript基础知识之数据类型

    typeof操作符 介于JavaScript是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof就是负责提供者方面信息的操作符。对一个值使用typeof操作符可能返回下列某个字符串: ● “undefined”——如果...

    javascript中 逻辑与或非和按位与或非的区别

    今天学习javascript的位操作符,对按位非的操作符(~)产生了疑问,因为以前学的非都是(!)就疑问是我自己记错了还是我买的书本版本太旧了。去百度后发现两者不一样,一个是按位非(~),一个是逻辑非(!)。...

    JavaScript数据类型详解

     介于JavaScript是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof就是负责提供者方面信息的操作符。对一个值使用typeof操作符可能返回下列某个字符串: ● “undefined”——如果这个值未定义...

    JavaScript王者归来part.1 总数2

     6.1.1.2 JavaScript函数的奥妙——魔法代码   6.1.2 函数的调用   6.2 函数的参数   6.2.1 形参与实参   6.2.2 Arguments对象   6.2.2.1 一个使用Arguments对象检测形参的例子   6.2.2.2 一个使用...

    Professional JavaScript for Web Developers.pdf

    通过ES2019获取ECMAScript的最新信息,包括类、承诺、异步/等待、代理、迭代器、生成器、符号、模块和扩展/休止操作符。 深入研究基本的web开发概念,如文档对象模型(dom)、浏览器对象模型(bom)、事件、表单、...

    JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符

    1、虽然标题是运算符和操作符,然而在我看来并没有多少严格区分的必要,在英文中,貌似也是用一个Operator来表示,所以在下文中我可能会混用。甚至,一些不属于运算符和操作符范畴的,我也整理在这里,只要我觉得...

    JavaScript中的数组操作介绍

    JavaScript中的数组对象自带了一些方法,可以通过使用这些方法来对数组进行操作。   join()   可以使用join()方法将数组中的成员合并到一个字符串中: 代码如下: var o = [1,2,3]; console.log(o.join());//1,2,...

    php网络开发完全手册

    6.3 本地文件的操作实例——小型留言本 96 6.3.1 留言发表模块 96 6.3.2 浏览模块 98 6.4 远程文件的操作实例 99 6.5 文件的上传与下载 99 6.5.1 文件的上传 99 6.5.2 文件的下载 100 6.6 小结 101 第7章 字符的处理...

    JavaScript 字符串乘法

    原文地址:http://www.davidflanagan.com/2009/08/string-multipli.html原作者:David Flanagan在Ruby中,“*”操作符用一个字符串作为左边参数,一个数字作为右边参数,来实现字符串重复。例如,”Ruby” * 2 的值...

    Editplus 3[1].0

    【1】 正则表达式应用——替换指定内容到行尾 【2】 正则表达式应用——数字替换----------------------------Microshaoft@CCF,jiuk2k@CCF 【3】 正则表达式应用——删除每一行行尾的指定字符 【4】 正则表达式应用...

    JavaScript基础语法之js表达式

    一般,关于javascript基础语法,人们听得比较多的术语是操作符和语句。但,其实还有一个术语经常使用,却很少被提到,这就是javascript表达式(expression)。 原始表达式(primary exression)  原始表达式是表达式的...

    front-end-grocery-store:《前端杂货铺》主要分享前端干货。包括但不限于面试、前端进阶、最新资讯、工程化、性能优化、工具资源

    — 构建优化篇浏览器文章描述备注【浏览器】一文读懂浏览器缓存通过 Node.js 小示例学习浏览器缓存策略【JavaScript】JS 中强大的操作符,总有几个你没听说过【JavaScript】 事件循环 —— 微任务 Microtask...

    javascript学习笔记(二) js一些基本概念

    1.typeof 操作符:用于检测给定变量的数据类型 代码如下: var message=”some string”; alert(typeof message); //”string” alert(typeof(message)); //”string” alert(typeof 100); /...

    EditPlus 2整理信箱的工具

    【1】 正则表达式应用——替换指定内容到行尾 【2】 正则表达式应用——数字替换----------------------------Microshaoft@CCF,jiuk2k@CCF 【3】 正则表达式应用——删除每一行行尾的指定字符 【4】 正则表达式应用...

Global site tag (gtag.js) - Google Analytics