资讯专栏INFORMATION COLUMN

【前端工程师手册】说清楚JavaScript中的相等性判断

crossoverJie / 2175人阅读

摘要:如果没有传入的话如果是类型,则取否则,取这个方法大致和一样,除了以下返回返回参考知乎中和区别是什么全面解析中的数据类型与类型转换规范

有哪些判断相等性的方法

JavaScript现在提供了三种方法来判断相等性:

===,三个等号即严格相等

==,两个等号即宽松相等

Object.is(),ES6中用来判断相等的方法

判断相等性的细节 ===(严格相等)

被比较的两个数不会进行类型转换,具体的比较过程如下:

不同类型的值:直接返回false

同一类型的基本类型的值:比较值是否相同,相同就返回true,不相同就返回false,有一个例外NaN === NaN返回false

同一类的复合类型的值:比较它们是否指向同一个对象,是就返回true,否则返回false

例子:

var a = 2, b = "2"
a === b // false
undefined === null // false
NaN === NaN // false
+0 === -0 // true
var f = function(){}
var c = f, d = f;
c === d // true
==(宽松相等)

宽松相等主要是在某些情况下涉及到隐式类型转换的问题,废话不说,看一下MDN上面对宽松相等的规则总结:


总结一下就是:

类型相同时,结果和===一样

undefined和null互相比较时为true,但是它们和其他类型比较时都为false

原始类型A和原始类型B比较时:ToNumber(A) === ToNumber(B)

原始类型A和复合类型B比较时:ToNumber(A) == ToPrimitive(B)

那么ToNumber和ToPrimitive这两个方法内部到底是如何判断的呢?查看一下ECMA说明



如果是这么个意思:

ToNumber

undefined,返回NaN

null,返回+0

boolean,true返回1,false返回+0

number,直接返回自身

string,将字符串的内容转换为数字,转换失败则返回NaN。例如"123"这样的就是返回123,"213a"这样的返回NaN

symbol,抛出typeerror错误

object,先调用toPrimitive,再对其结果调用toNumber

ToPrimitive

首先这个方法有两个参数,input和preferredType,如果preferredType是number的话,大致过程如下:

如果input就是原始类型,直接返回其自身

调用input.valueOf(),如果结果是原始类型,则返回该结果

调用input.toString(),如果结果是原始类型,则返回该结果

抛出typeerror错误

如果preferredType是string,那么第2步和第3步顺序反过来。

如果preferredType没有传入的话:

如果input是Date类型,则preferredType取string

否则,preferredType取number

Object.is

这个方法大致和===一样,除了以下:

Object.is(NaN, NaN) 返回true

Object.is(+0, -0) 返回false

参考

知乎-Javascript 中 == 和 === 区别是什么?

全面解析js中的数据类型与类型转换

ECMA规范

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96474.html

相关文章

  • 最最最常见的Java基础知识面试题总结

    摘要:地址面试必备最最最常见的面试题总结第一周一中的值传递和引用传递非常重要首先要明确的是对象传递数组类接口是引用传递,原始类型数据整型浮点型字符型布尔型传递是值传递。这个哈希码的作用是确定该对象在哈希表中的索引位置。 showImg(https://segmentfault.com/img/remote/1460000015923339?w=922&h=519); 这里会分享一些出现频率极...

    syoya 评论0 收藏0
  • 前端每周清单第 51 期: React Context API 与模式变迁, Webpack 与 W

    摘要:前端每周清单第期与模式变迁与优化界面生成作者王下邀月熊编辑徐川前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点分为新闻热点开发教程工程实践深度阅读开源项目巅峰人生等栏目。 showImg(https://segmentfault.com/img/remote/1460000013279448); 前端每周清单第 51 期: React Context A...

    Jiavan 评论0 收藏0
  • 前端开发者手册2019

    摘要:年,和前端开发者与应用程序前端开发者之间产生了巨大的分歧。开发最常见的解决方案有手机和平板的原生应用程序桌面应用程序桌面应用程序原生技术最后,前端开发者可以从浏览器开发中学习到,编写代码不需要考虑浏览器引擎的限制。 前端开发者手册2019 Cody Lindley 编著 原文地址 本手册由Frontend Masters赞助,通过深入现代化的前端工程课程来提高你的技能。 下载:PDF ...

    church 评论0 收藏0
  • 前端开发者手册2019

    摘要:年,和前端开发者与应用程序前端开发者之间产生了巨大的分歧。开发最常见的解决方案有手机和平板的原生应用程序桌面应用程序桌面应用程序原生技术最后,前端开发者可以从浏览器开发中学习到,编写代码不需要考虑浏览器引擎的限制。 前端开发者手册2019 Cody Lindley 编著 原文地址 本手册由Frontend Masters赞助,通过深入现代化的前端工程课程来提高你的技能。 下载:PDF ...

    邹立鹏 评论0 收藏0
  • 前端开发者手册2019

    摘要:年,和前端开发者与应用程序前端开发者之间产生了巨大的分歧。开发最常见的解决方案有手机和平板的原生应用程序桌面应用程序桌面应用程序原生技术最后,前端开发者可以从浏览器开发中学习到,编写代码不需要考虑浏览器引擎的限制。 前端开发者手册2019 Cody Lindley 编著 原文地址 本手册由Frontend Masters赞助,通过深入现代化的前端工程课程来提高你的技能。 下载:PDF ...

    xiao7cn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<