== vs === in Javascript

本文来自网易云社区


作者:魏文庆

如果你只想知道==与===的区别,请直接看总结,当然我更希望您能耐心看完全文。
Javascript中用于相等比较的操作符有两个==和===。==我们通常称为“等于”,而===我们通常称为“严格等于”。本文将对==和===做详细说明。===相对简单,让我们从===开始。

===

===首先要求比较双方类型相同, 还要求比较双方值相等。 如果比较的双方是都是对象类型,只有指向同一个对象,才能严格相等。关于javascript的数据类型,请参见Javascirpt基本数据类型。
  本节示例如下:

    // 类型相同,值相同,才严格相等1 === 1;    "jerry" === "jerry";    true === true;    null === null;    undefined === undefined;    // 类型相同且为对象类型,必须是指向同一个的对象才严格相等{name:"jerry"} !== {name: "jerry"}  // 两个不同的{name:"jerry"}对象var a = {name:"jerry"};    var b = a;a === b;    // 指向同一个对象// 类型不同,不严格相等null !== undefined;    false !== 0;    1 !== "1";

==

==在进行比较时,如果比较的双方数据类型不同,通常会先转换成相同的类型再进行比较。如果比较的双方类型相同,这时与===相同:如果比较的双方是对象类型,只有指向同一个对象,才能相等;如果是其他类型,比较值是否相等。
比较的双方类型相同时,可以参考===,比较双方类型相同的例子,也可作为本节的例子。下面我们重点讨论比较双方类型不同的情况。
上文中提到比较双方数据类型不同,通常会先转换成相同的类型,哪些是异常呢?null和undefined。


null和undefined在比较的时候不会转换成其他类型。null只和undefined相等。

本节示例如下:

    // null和undefined相等null == undefined;    // null/undefined比较时不会做隐式类型转换0 != null;    "undefined" != undefined;    null != false;

我们对上例中的0!=null进行具体分析,如果比较之前进行隐式类型转换的话,null转换成Number型的结果为0, 值是相等的,但因为null/undefined在比较之前不会隐式类型转换,所以0!=null。"undefined" != undefined、 null != false 原因类似。

关于隐式类型转换到指定类型的结果,其实等价于调用指定类型的构造函数, 比如null隐式类型转换成Number型的结果等于Number(null), undefined转换成String型的结果等于String("undefined"),详情请参见javascript类型转换。

比较的双方数据类型不同时,进行隐式类型转换时优先转换成Number型。

本节示例如下:

    // 隐式类型转换优先转换成Number型"99" == 99; // "99"转换成Number型为99"" == 0;    // ""转换成Number型为0true == 1;  // true转换成Number型为1false == "0";    ' \n\n\n' == false;

上例中false=="0"比较难以理解,无论是"0"转换成Boolean型(结果为true),还是把false转换成String型(结果为"false"),值都是不相等的,为什么false=="0"呢?我们只要记住优先转换成Number型原则, false转换成Number型,等于 Number(false),等于0, "0"转换成Number型,等于Number("0"), 等于0, 值相等。' \n\n\n' == false类似,Number(' \n\n\n')等于0, Number(false)等于0, 值相等。

比较的双方数据类型不同且有一方是Object类型, 先把Object类型转换成原始类型。我们知道基本只有String/Number/Boolean对象能转换成有意思的原始类型。我们在程序中不推荐使用String/Number/Boolean对象(直接使用原始值), 这部分内容就不展开了。

总结

==和===的异同点:

  1. 比较双方都是对象时,只有指向同一个对象才会相等(包含==/===)。

  2. ===要求比较双方类型相同并且值相等。

  3. ==在比较双方类型不同的时候通常会进行隐式类型转换。

易于记忆的==比较的原则:

  1. null==undefined, null/undefined不进行隐式类型转换。

  2. 进行隐式类型或转换时,优先转换成Number型。



网易云大礼包:https://www.163yun.com/gift

本文来自网易云社区,经作者魏文庆授权发布。


相关文章:
【推荐】 3分钟掌握一个有数小技能:回头客分析
【推荐】 两分钟了解Docker的优势

转载于:https://www.cnblogs.com/163yun/p/9565415.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] 使用纯css能否监控到用户的一些信息?怎么实现?

[css] 使用纯css能否监控到用户的一些信息?怎么实现? 利用:active 伪类实现监控用户的点击 .button-1:active::after {content: url(./pixel.gif?actionclick&idbutton1);display: none; } .button-2:active::after {content: url(./pixel.gif?ac…

hive 动态分区实现 (hive-1.1.0)

hive 动态分区实现 (hive-1.1.0) 笔者使用的hive版本是hive-1.1.0 hive-1.1.0动态分区的默认实现是只有map没有reduce,通过执行计划就可以看出来。(执行计划如下) insert overwrite table public_t_par partition(delivery_dateke…

浏览器的组成

外壳shell:User Interface(用户界面)、Browser engine(浏览器引擎)、Networking(网络)、UI Backend(UI 后端)、Date Persistence(数据持久化存储)…

[css] css的加载会阻塞js运行吗?为什么?

[css] css的加载会阻塞js运行吗?为什么? 会阻塞js的执行,因为js可能会去获取或改变元素的样式,所以浏览为了不重复渲染, 等所有的css加载渲染完成后在执行js个人简介 我是歌谣,欢迎和大家一起交流前后端知…

JS基础知识点总结

NaN 与任何值相比较 都是false (包括它自己 如NaN NaN >false),可以理解为它连自己的不认识parseInt("123abc") 计算机是从头到尾读字符串,如果不是数字就截断,直接返回parseFloat同理num 123.1456789 num.toFixed(3…

[css] css的加载会阻塞DOM树解析和渲染吗?为什么

[css] css的加载会阻塞DOM树解析和渲染吗?为什么 css的加载不会阻止DOM树的解析 css的加载会阻止DOM树的渲染,因为css的下载完成后解析成CSSOM与DOM生成渲染树后,页面才会渲染,绘制出来个人简介 我是歌谣,欢迎和大家…

0901

下拉刷新一万赞:https://github.com/scwang90/SmartRefreshLayout git上搜索:refreshLayouthttps://github.com/search?odesc&qrefreshLayout&sstars&typeRepositories SwipeRefreshLayout pullRefresh XRecyclerView转载于:https://www.cn…

jQuery Validate 前端校验

参考自:https://www.runoob.com/jquery/jquery-plugin-validate.html 建议:将引入的js,jQuery,css文件下载到自己的本地或者远程服务器 否则:如果您的网站使用了SSL证书请求的安全策略,注意引用的文件是否…

[css] 异步加载CSS的方式有哪些?

[css] 异步加载CSS的方式有哪些? 异步加载CSS 说到加载 CSS 这种事儿不是很简单吗?像这样咯: 这不就完事儿了嘛! 这样是没错!但是这样有问题啊——会阻塞渲染!浏览器看到这个标签就会停下手里的活儿&…

Golang 垃圾回收机制

1. Golang GC 发展 Golang 从第一个版本以来,GC 一直是大家诟病最多的。但是每一个版本的发布基本都伴随着 GC 的改进。下面列出一些比较重要的改动。 v1.1 STWv1.3 Mark STW, Sweep 并行v1.5 三色标记法v1.8 hybrid write barrier2. GC 算法简介  这一小节介绍三…

Bootstrap FileInput(文件上传)中文API整理

下载地址、API和DOM地址(英语好的小伙伴可以看看) 下载地址:https://github.com/kartik-v/bootstrap-fileinput API文档 :http://plugins.krajee.com/file-input D E M O:http://plugins.krajee.com/file-input/demo …

[css] 举例说明如何从html元素继承box-sizing?

[css] 举例说明如何从html元素继承box-sizing? html{box-sizing:border-box;}*,*:before,*:after{box-sizing:inherit;}个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起…

Configutation读取properties文件信息

commons configuration可以很方便的访问配置文件和xml文件中的的内容。Commons Configuration 是为了提供对属性文件、XML文件、JNDI资源、来自JDBC Datasource数据的访问。 官方文档:http://commons.apache.org/proper/commons-configuration/ 我们研究configurati…

JavaScript 所有数据类型

JavaScript 所有数据类型 在 JavaScript 中有 5 种不同的数据类型: stringnumberbooleanobjectfunction 3 种对象类型: ObjectDateArray 2 个不包含任何值的数据类型: nullundefined 可以使用 typeof 操作符来查看 JavaScript 变量的数据…

[css] 使用css的attr()写一个类似a标签title的提示框

[css] 使用css的attr()写一个类似a标签title的提示框 .box{position:relative;}.box:hover{content: attr(data-title); display: inline-block;padding: 10px 14px;border: 1px solid #ddd;border-radius: 5px;position: absolute;top: -50px;left: -10px;}个人简介 我是歌…

JavaScript 严格模式(use strict)

使用 "use strict" 指令 "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。 它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。 "use strict" 的目的是指定代码在严格条件下执行。…

IO 概括

# 一、概览 Java 的 I/O 大概可以分成以下几类: - 磁盘操作:File- 字节操作:InputStream 和 OutputStream- 字符操作:Reader 和 Writer- 对象操作:Serializable- 网络操作:Socket- 新的输入/输出&#xff1…

JavaScript this 关键字

面向对象语言中 this 表示当前对象的一个引用。 但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。 在方法中,this 表示该方法所属的对象。如果单独使用,this 表示全局对象。在函数中,this 表示全局对象。…

[css] 鼠标事件css的:hover和js的mouseover有什么区别?

[css] 鼠标事件css的:hover和js的mouseover有什么区别? JavaScript中鼠标事件有:onmouseover和onmouseout: 当鼠标移入和移出时触发事件onmousedown和onmouseup: 当鼠标按钮被按下或者松开时触发事件onclick和ondbclick &#xf…

【一步一步学习spring】spring入门

1. spring概述 spring是一个开源框架spring为简化企业级应用开发而生,解决的是业务逻辑层和其他各层的松耦合问题,他将面向接口的编程思想贯穿整个系统应用。spring是javaSE/EE的一站式框架。web层有spring-mvc,业务层有spring ioc、事务等机…