【===】被称为严格相等运算符,【==】被称为相等运算符,两个都是用来比较两边的值是否相等,相等则返回true,否则返回false。

然鹅,他们的比较规则是不一样的。


【===】严格相等运算符的比较规则:

1.两边数据的类型不同,直接返回false:

'1' === 1 => false

2.两边都是相同类型的基础数据类型(number, string, boolean)比较时,他们的值相等,则返回true,否则返回false:

1 === 1 => true
'1' === '1' => true
+0 === -0 => true

3.NaN与NaN比较会返回false:

NaN === NaN => false
// 相反地
NaN !== NaN => true

4.两边都是引用数据类型时,比较的是指针指向的内存地址是否相等,相等返回true,否则返回false:

var a1 = []
var a2 = []
var a3 = a1
var j1 = {a: 1}
var j2 = {a: 1}
var j3 = j1
var f1 = function () {}
var f2 = function () {}
var f3 = f1
a1 === a2 => false
a1 === a3 => true
j1 === j2 => false
j1 === j3 => true
f1 === f2 => false
f1 === f3 => true

5.null和undefined会与自身严格相等:

null === null => true
undefined === undefined => true
// null与undefined 不会严格相等,因为他们类型不一样:)
null === undefined => false


【==】相等运算符比较规则:

1.相同类型比较时,和严格相等比较规则一样:

1 == 1 => true
'1' == '1' => true
[] == [] => false
{} == {} => false

2.两边都是基础数据类型时,会将数值进行转换,转换成number类型在进行比较:

1 == true; // true
// 等同于 1 === 10 == false; // true
// 等同于 0 === 02 == true; // false
// 等同于 2 === 12 == false; // false
// 等同于 2 === 0'true' == true; // false
// 等同于 Number('true') === Number(true)
// 等同于 NaN === 1'' == 0; // true
// 等同于 Number('') === 0
// 等同于 0 === 0'' == false;  // true
// 等同于 Number('') === Number(false)
// 等同于 0 === 0'1' == true;  // true
// 等同于 Number('1') === Number(true)
// 等同于 1 === 1'n  123  t' == 123; // true
// 因为字符串转为数字时,省略前置和后置的空格

3.引用数据类型与基础数据类型比较时,会将引用数据类型转换为基础数据类型的值,再进行比较:

其中Object转为原始值:

所有object转为boolean时都为true。

object转为基础数据类型时会先调用自身原型的toString()方法,如果没有toString()方法,则会调用valueOf()。

[] == 1 => false
[] == 0 => true
({}) == 1 => false
// ({}) 调用toString方法得到"[object Object]", "[object Object]" 转换为number为NaN,所以NaN === 1 为false
({}) != NaN => true

4.两边有null或者undefined时,null和undefined 与其他类型比较时,都会返回false,他们与对方或者自身比较时,会返回true:

null == 1 => false
null == '1' => false
null == [] => false
null == {} => false
null == true => false
null == undefined => true
null == null => true
undefined == undefined => true


总结:建议使用严格相等运算符【===】

以上大概就是这两者的区别,如果有不足或者错误,欢迎指正!

js 运算符_JS的相等和严格相等运算符(== amp; ===)相关推荐

  1. HTML学习9 JS 数字和字符串 变量的类型 运算符和表达式 布尔值和关系运算符、逻辑运算符

    JavaScript简介 1.1 JavaScript的用途 JavaScript用来制作web页面交互效果,提升用户体验. 简单列出几个JavaScript能够制作的页面效果,它能干什么: 轮播图 ...

  2. 【C语言运算符大全】快速学会C语言运算符

    目    录(本篇字数:2120) 介绍 运算符分类 算术运算符 逻辑运算符 关系运算符 位运算符 赋值运算符 经典问题:a = 5,b = 8,如何交换两个变量的值? 介绍 说到运算符,从小我们就学 ...

  3. c++运算符优先级_C语言入门教程-(6)运算符

    1.运算符概述 运算符是一种编译器执行特定的数学或逻辑操作的符号.C语言提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 其他运算符 2.算术运算符 算术 ...

  4. # c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符...

    c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符 标签(空格分隔): c++ 前言 我在c++学习的过程中, 对这几个不太常见的运算符重载不太会写.出现了很 ...

  5. sizeof是c语言的一种运算符,C语言位运算和sizeof运算符详解

    位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...

  6. python运算符的分类_python对象——标准类型运算符

    对象值的比较 比较运算符用来判断同类型对象是否相等,所有的内建类型均支持比较运算,比较运算返回布尔值 True 或 False. 注意,实际进行的比较运算因类型而异.换言之,数字类型根据数值的大小和符 ...

  7. java 运算符_详解Java表达式与运算符

    课程导言 [变量的赋值与计算都离不开表达式,表达式的运算依赖于变量.常量和运算符.本节课讨论Java的表达式的构成.常量的定义.运算符的分类及应用.通过本课的学习你将掌握运用表达式和运算符完成变量赋值 ...

  8. c++语言运算符的优先次序,C++中的运算符和运算符优先级总结

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C++ 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本文将逐一介绍算术运 ...

  9. c语言异或运算符_计算机中C语言的-运算符

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐一介绍算术运 ...

最新文章

  1. Linux入门:部署JavaWeb项目
  2. 将数据库的0和1显示为jsp页面的是和否
  3. scrapy item引用时报错
  4. 数据结构:(1)课程总览
  5. 【面向对象】泛化与继承
  6. react 生成图片二维码_21个React开发神器
  7. eclipse图标含义
  8. leetcode 85. Maximal Rectangle
  9. python求和1到100_python实现1加到100
  10. cocos 微信登陆失败(笔记)
  11. [bzoj4134]ljw和lzr的hack比赛
  12. padavan手动安装php
  13. 深信服python二面面什么_深信服 python开发 北京 笔试一面二面 面经
  14. 已经破解好的Quartus软件,license为什么会突然失效
  15. 小米机器人磁条_如何评价小米米家扫拖机器人1C?
  16. Lock-step 锁步核有哪些
  17. Xmind思维导图编写测试点,便于扩展测试用例(详细)
  18. Java数组实现循环队列
  19. KBP206-ASEMI整流桥KBP206
  20. linux系统编译时make出错,Android源码编译make的错误处理

热门文章

  1. C++编译预处理:宏定义指令、文件包含指令和条件编译指令
  2. 数组和指针、数组指针和指针数组
  3. IOS15打包静态库
  4. C++实现黑客帝国流星雨效果
  5. 计算机操作系统实验一,计算机操作系统实验一.doc
  6. 多线程内存泄漏_内存泄漏的场景和解决办法
  7. linux datetime,Python datetime模块示例详解
  8. vue 点击div 获取位置_vue 点击元素滚动到指定位置
  9. oracle查询哪个sql占用资源,查询oracle最耗资源的sql语句
  10. linux进程通信ips,Cisco IPS 分析引擎拒绝服务漏洞(CVE-2014-0718)