Js中==与===
时间:2022-07-24
本文章向大家介绍Js中==与===,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Js中==与===
JavaScript
中提供==
相等运算符与===
严格相等运算符,建议是只要变量的数据类型能够确定,一律使用===
==相等运算符
==
在判断相等时会进行隐式的类型转换, 其比较遵循一些原则,即先转换类型再比较
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值,即是调用
Number()
方法 - 如果一个操作数是字符串,另一个是数值,在比较相等性之前先将字符串转换为数值,同样调用
Number()
方法 - 如果一个操作数是对象,另一个操作数不是,则调用对象的
valueOf()
和toString()
方法把对象转换成基础类型的值再比较,除Date
对象外,会优先尝试使用valueOf()
方法,用得到的基本类型按照前面的规则进行比较。 - 以及
null == undefined
,此外任何其他组合,都不相等。
1 == true //true // Number Boolean
2 == true //false
1 == "1" //true // Number String
[] == "" //true // Object String
[] == false // true // Object Boolean
[] == 0 //true // Object Number
[] == {} //false
[] == [] //false
{} == {} //false
null == undefined //true
在使用的时候可能会出现一些问题
0 == "0" //true
0 == [] //true
"0" == [] // false
如果是直接实现了valueOf()
与toString()
的方法,而不是调用原型链上的Object.prototype.valueOf()
与Object.prototype.toString()
方法,甚至能够产生异常。
var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}}
console.log(obj == 0) // Uncaught TypeError: Cannot convert object to primitive value
===严格相等运算符
===
先判断类型再比较,类型不同直接不相等
ES6
数据类型有Number
、String
、Boolean
、 Object
、Symbol
、null
和undefined
。
1 === true //false
1 === "1" //false
[] === "" //false
null === undefined //false
if
if()
也可以看作是一个单独的运算符类别
if(true) console.log("exec"); //exec
if(false) console.log("exec");
if(1) console.log("exec"); //exec
if(0) console.log("exec");
if(-1) console.log("exec"); //exec
if("true") console.log("exec"); //exec
if("1") console.log("exec"); //exec
if("0") console.log("exec"); //exec
if("") console.log("exec");
if(null) console.log("exec");
if(undefined) console.log("exec");
if("null") console.log("exec"); //exec
if("undefined") console.log("exec"); //exec
if([]) console.log("exec"); //exec
if({}) console.log("exec"); //exec
if([0]) console.log("exec"); //exec
if(NaN) console.log("exec");
参考
https://www.zhihu.com/question/31442029
https://dorey.github.io/JavaScript-Equality-Table/#three-equals
- GIF/PNG/JPG和WEBP/base64/apng图片优点和缺点整理
- 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
- 3409: [Usaco2009 Oct]Barn Echoes 牛棚回声
- 浅谈webp
- 3385: [Usaco2004 Nov]Lake Counting 数池塘
- 2761: [JLOI2011]不重复数字(平衡树)
- 无图片字体icon
- 数据结构(三):栈与队列
- 3555: [Ctsc2014]企鹅QQ
- 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
- 3097: Hash Killer I
- 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复
- 1684: [Usaco2005 Oct]Close Encounter
- 算法模板——Dinic最小费用最大流
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 十二、面向对象实战之封装拖拽对象
- 数组reduce方法的高级用法
- 十七、详解 ES6 Modules
- 超干货!为了让你彻底弄懂 MySQL 事务日志,我通宵肝出了这份图解!
- 什么情况下不能使用最坏情况评估算法的复杂度?
- Python运算符
- kubeadm高可用集群意外删除一mater节点,重新加入失败
- Chevereto——简介及安装
- Typecho开启伪静态并隐藏index.php
- Prism代码高亮Pjax重载函数
- Qt示例-AnalogClock-自定义窗体-使用QPainter的转换和缩放特性简化绘图
- 2019-12-27-traefik
- 2019-12-05-eck-qustion
- 聊聊dubbo-go的ConsumerSignFilter
- Javascript错误处理