`

(转)ECMAScript 等性运算符,即"=="、"==="、"!="

 
阅读更多

引至:http://www.w3cschool.cn/pro_js_operators_equality.html

 

判断两个变量是否相等是程序设计中非常重要的运算。在处理原始值时,这种运算相当简单,但涉及对象,任务就稍有点复杂。

ECMAScript 提供了两套等性运算符:等号和非等号用于处理原始值,全等号和非全等号用于处理对象。

等号和非等号

在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。

执行类型转换的规则如下:

  • 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
  • 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
  • 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
  • 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

在比较时,该运算符还遵守下列规则:

  • 值 null 和 undefined 相等。
  • 在检查相等性时,不能把 null 和 undefined 转换成其他值。
  • 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
  • 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。

重要提示: 即使两个数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。

 

下表列出了一些特殊情况,以及它们的结果:

全等号和非全等号

等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。

全等号由三个等号表示(===),只有在无需类型转换运算数就相等的情况下,才返回 true。

例如:

var sNum = "66";
var iNum = 66;
alert(sNum == iNum);	//输出 "true"

alert(sNum === iNum);	//输出 "false"

在这段代码中,第一个 alert 使用等号来比较字符串 "66" 和数字 66,输出 "true"。如前所述,这是因为字符串 "66" 将被转换成数字 66,,然后才与另一个数字 66 进行比较。第二个 alert 使用全等号在没有类型转换的情况下比较字符串和数字,当然,字符串不等于数字,所以输出 "false"。

非全等号由感叹号加两个等号(!==)表示,只有在无需类型转换运算数不相等的情况下,才返回 true。

例如:

var sNum = "66";
var iNum = 66;
alert(sNum != iNum);	//输出 "false"

alert(sNum !== iNum);	//输出 "true"

这里,第一个 alert 使用非等号,把字符串 "66" 转换成数字 66,使得它与第二个运算数 66 相等。因此,计算结果为 "false",因为两个运算数是相等的。第二个 alert 使用的非全等号。该运算是在问:"sNum" 与 "iNum" 不同吗?这个问题的答案是:是的(true),因为 sNum 是字符串,而 iNum 是数字,它们当然不同。

 

== equality 等同,=== identity 恒等;“==”只要求值相等,“===”要求值和类型都相等

==: 两边值类型不同的时候,要先进行类型转换,再比较。
===:不做类型转换,类型不同的一定不等。
  • 大小: 2.8 KB
分享到:
评论

相关推荐

    JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)

    2.9.5、加性运算符 加性运算符(即加号和减号)通常是最简单的运算符,不过在ECMAScript中,每个加性运算符都有大量的特殊行为。 1、加法运算符: 代码如下: var iResult=1+2; console.log(iResult);//outputs 3 ...

    Javascript数组操作高级心得整理

    (5) 等性运算符(==、===、!=、!==) 6 (6) 条件运算符 7 (7) 其他运算符 7  赋值运算符 7  逗号运算符 7  typeof运算符 7  delete运算符 7  instanceof运算符 7 4. with语句 8 (1) 语法及作用 8 (2) 示例 8...

    ECMAScript 2018快速入门 高清完整PDF

    本书分为13章,较为系统地介绍ECMAScript语言,内容包括变量与常量、表达式和运算符、字符串、数字和符号、数组和类型化数组、对象、函数、集合和映射、迭代器和生成器、Promise对象与异步函数、代理、类和模块,...

    javascript入门笔记

    使用场合:任意数字与1做按位与操作,可以判断奇偶性,结果为1,则为奇数,否则为偶数 0 :0 1 :1 2 :10 3 :11 4 :100 5 :101 5 & 1 101 001 ========== 001 4 & 1 100 001 ==== 000 2、按...

    es-abstract-refs:ECMAScript 的抽象参考提案

    ECMAScript 的抽象参考 该提案已被以下两项提案取代: 概述和动机 尽管具有函数式编程设施,但 ECMAScript 表现出对使用实例方法的面向对象的“从左到右”组合的强烈偏好。 不幸的是,通过实例方法的组合需要通过向...

    style-guide:马特(Matt)自以为是JavaScript样式指南

    ECMAScript 5兼容性 ECMAScript 6+(ES 2015+)样式 测验 表现 资源 执照 种类 1.1基元:访问基元类型时,可以直接使用其值。 string number boolean null undefined const foo = 1 let bar = foo bar = 9 ...

    natero-style-guide

    ECMAScript 5兼容性 ECMAScript 6样式 测验 表现 资源 执照 种类 1.1 基元:访问基元类型时,可以直接使用其值。 string number boolean null undefined const foo = 1 ; let bar = foo ; bar = 9 ; console ...

    Airbnb JavaScript 风格指南

    目录 类型 参考 对象 数组 解构 弦乐 ...ECMAScript 5 兼容性 ECMAScript 6+ (ES 2015+) 样式 标准库 测试 表现 资源 在野外 翻译 JavaScript 风格指南 指南 与我们讨论 JavaScript 贡献者 执照 修正案

    quickjs超小js引擎

    它可选支持数学扩展,例如大整数 (BigInt),大浮点数 (BigFloat) 以及运算符重载。轻量而且易于嵌入:只需几个C文件,没有外部依赖,一个x86下的简单的“hello world”程序只要180 KiB。具有极低启动时间的快速解释...

    JavaScript权威指南(第6版)(附源码)

    13.4 兼容性和互用性 13.5 可访问性 13.6 安全性 13.7 客户端框架 第14章 Window对象 14.1 计时器 14.2 浏览器定位和导航 14.3 浏览历史 14.4 浏览器和屏幕信息 14.5 对话框 14.6 错误处理 14.7 作为Window对象属性...

    JavaScript 权威指南(第四版).pdf

     13.4 兼容性和互用性326  13.5 可访问性333  13.6 安全性334  13.7 客户端框架339  第14章 Window对象341  14.1 计时器342  14.2 浏览器定位和导航343  14.3 浏览历史345  14.4 浏览器和屏幕信息346  ...

    JavaScript权威指南(第6版)中文版pdf+源代码

     13.4 兼容性和互用性326  13.5 可访问性333  13.6 安全性334  13.7 客户端框架339  第14章 Window对象341  14.1 计时器342  14.2 浏览器定位和导航343  14.3 浏览历史345  14.4 浏览器和屏幕信息346  ...

    JavaScript权威指南(第6版)(中文版)

    13.4 兼容性和互用性 13.5 可访问性 13.6 安全性 13.7 客户端框架 第14章 Window对象 14.1 计时器 14.2 浏览器定位和导航 14.3 浏览历史 14.4 浏览器和屏幕信息 14.5 对话框 14.6 错误处理 14.7 作为Window对象属性...

    JavaScript权威指南(第6版)

    13.4 兼容性和互用性 13.5 可访问性 13.6 安全性 13.7 客户端框架 第14章 Window对象 14.1 计时器 14.2 浏览器定位和导航 14.3 浏览历史 14.4 浏览器和屏幕信息 14.5 对话框 14.6 错误处理 14.7 作为Window对象属性...

    JavaScript基础和实例代码

    1.8.1 ECMAScript 1.8.2 DOM 1.8.3 BOM 1.9 客户端与服务器端脚本 1.10 JavaScript与JScript、 VBScript 1.11 JavaScript与Java、Java applet 1.12 JavaScript的未来如何 1.13 本章小结 第2章 JavaScript语言入门 ...

    JavaScript权威指南(第六版) 清晰-完整

    13.4 兼容性和互用性 13.5 可访问性 13.6 安全性 13.7 客户端框架 第14章 Window对象 14.1 计时器 14.2 浏览器定位和导航 14.3 浏览历史 14.4 浏览器和屏幕信息 14.5 对话框 14.6 错误处理 14.7 作为Window对象属性...

    源文件程序天下JAVASCRIPT实例自学手册

    1.8.1 ECMAScript 1.8.2 DOM 1.8.3 BOM 1.9 客户端与服务器端脚本 1.10 JavaScript与JScript、 VBScript 1.11 JavaScript与Java、Java applet 1.12 JavaScript的未来如何 1.13 本章小结 第2章 JavaScript语言入门 ...

    js笔记.docx

    1. ECMAScript标准 语法 变量和数据类型 运算符 逻辑控制语句 关键字,保留字 对象 2.浏览器模型 浏览器对象模型(Browser Object Model,BoM),提供了独立内容于浏览器窗口进行交互的对象使用浏览器对象模型可以...

Global site tag (gtag.js) - Google Analytics