iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >JavaScript中的4 个相等比较算法的简单介绍
  • 702
分享到

JavaScript中的4 个相等比较算法的简单介绍

2024-04-02 19:04:59 702人浏览 独家记忆
摘要

这篇文章主要讲解了“javascript中的4 个相等比较算法的简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中的4 个相等比较

这篇文章主要讲解了“javascript中的4 个相等比较算法的简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中的4 个相等比较算法的简单介绍”吧!

JavaScript 运算中,一共包含 4 个相等比较算法:

  • 抽象相等比较

  • 严格相等比较

  • SameValueZero

  • SameValue

可以这么说,只要你做过相等比较,你就在使用四个算法中的一个。因为这些算法部署在了涉及到相等比较的操作符或方法中。

参见下表:

JavaScript中的4 个相等比较算法的简单介绍

怎样区分这些算法的不同呢,可以从两方面切入:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 是否会发生类型转换

  3. 对 NaN、-0、+0(即 0) 这些值是否存在特殊处理

下面给出一个总结

JavaScript中的4 个相等比较算法的简单介绍

就是说,抽象相等比较算法会发生类型转换,SameValue 算法不会特殊对待 NaN、-0、+0 这些值。

类型转换如何进行的?

上面讨论的四种算法中,只有“抽象相等比较算法”会发生类型转换。发生类型转换的前提是:比较的两个值类型不同,而且转换结果是数值。

举个例子:

1 == 1 // true(未发生类型转换) '1' == 1 // true(发生了类型转换)

第一个比较为 true,好理解;第二个就不一样了,会发生类型转换——将非数字值转为数字:'1' 跟 1 比较,两者类型不同,'1'  是字符串,因此会先转为数字——也就是 1(Number('1')),结果变为两个 1 在一起比较,结果就是 true 了。

“抽象相等比较算法”还有一个比较怪癖的地方,在于规范中定义 null == undefined 返回结果为  true。按理说应该发生类型转换,再进行比较的,比较结果应为 false(null 转为 0,undefined 转为 NaN,两者不等)。

JavaScript中的4 个相等比较算法的简单介绍

规范中对抽象相等比较算法搞了一个“小怪癖”:定义 null 和 undefined 的比较结果为 true

我猜想,这一定义可能是为了保证向前兼(tián)容(kēng),因此,我们记住即可。除此之外的其他情况,都按照类型转换后的比较结果为准。

NaN、-0 和 +0 是如何被特殊处理的?

ES2015 标准出版之前,是没有 SameValueZero 和 SameValue  这两个算法的。也就是说只有抽象相等比较和严格相等比较这两个算法:这两个算法有点问题——就是不能区分 NaN 以及 +0 和 -0。因此在 ES2015  之前,我们会遭遇这样的比较结果:

NaN === NaN // false +0 === -0 // true [NaN].indexOf(NaN) // -1 [0].indexOf(-0) // -1

NaN 与自身不相等,+0 等于 -0。在意识中,我们可能接受不了“NaN 与自身不相等”的结果,但是能够理解“+0 等于 -0”(都是 0  嘛),但是在某些符号位具有含义的场景中——- 表示向左,+ 表示向右,那么区分 +0 等于 -0 就有意义了。

基于此,ES2015 中引入了 SameValue 算法,Object.is() 方法内部就是使用此算法,比较两个值是否相等。

Object.is(NaN, NaN) // true Object.is(0, -0) // false

SameValueZero 算法,通过名称我们可能就猜到,与 SameValue 算法的区别,仅仅是对“零”的态度上——SameValueZero  算法不能区分 +0 和 -0。

就是说:

var array = [NaN, -0] array.includes(NaN) // true array.includes(0) // true

array.includes(0) 的结果没有返回 false,是因为其内部使用的 SameValueZero 算法不能区分 +0 和 -0。

感谢各位的阅读,以上就是“JavaScript中的4 个相等比较算法的简单介绍”的内容了,经过本文的学习后,相信大家对JavaScript中的4 个相等比较算法的简单介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: JavaScript中的4 个相等比较算法的简单介绍

本文链接: https://www.lsjlt.com/news/81522.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中的4 个相等比较算法的简单介绍
    这篇文章主要讲解了“JavaScript中的4 个相等比较算法的简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中的4 个相等比较...
    99+
    2024-04-02
  • Python中的比较运算符用法介绍
    这篇文章主要介绍“Python中的比较运算符用法介绍”,在日常操作中,相信很多人在Python中的比较运算符用法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的比较运算符用法介绍”的疑惑有所...
    99+
    2023-06-02
  • jQuery中bind的用法简单介绍
    jQuery中的bind()方法用于将一个处理函数绑定到指定的元素上,该处理函数将在特定事件触发时被调用。bind()方法的基本语法如下:```javascript$(selector).bind(event, data, handle...
    99+
    2023-08-09
    jQuery
  • JavaScript判断两个数组相等的4类方法总结
    目录循环比较toStringjoinJSON.stringify当数组元素是空元素、null、undefined时null 和 undefined空元素总结在JavaScript中,...
    99+
    2023-02-21
    JavaScript判断数组相等方法 JavaScript判断数组相等 JavaScript数组相等
  • js如何比较两个单独的数组或对象是否相等
    这篇文章主要介绍js如何比较两个单独的数组或对象是否相等,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!所谓js的中的传值,其实也就是说5种基本数据类型(null,undefind,b...
    99+
    2024-04-02
  • SQLite中的运算符表达式简单介绍
    本篇内容介绍了“SQLite中的运算符表达式简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SQLite中的运算符表达式在SQLite...
    99+
    2023-06-05
  • Java比较两个对象中全部属性值是否相等的方法
    例如下述Java类: import java.io.Serializable; import java.util.List; public class Bean_Topolog...
    99+
    2024-04-02
  • javascript中的枚举算法实例介绍
    本篇内容介绍了“javascript中的枚举算法实例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ja...
    99+
    2024-04-02
  • javascript中排序算法的详细介绍
    这篇文章给大家分享的是有关javascript中排序算法的详细介绍的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。排序算法是面试中的高频考察点,我们需要熟练掌握。本文整理了最经典、最常用的排序算法并且搭配了动图和视...
    99+
    2023-06-14
  • MySQL中decimal类型用法的简单介绍
    MySQL中支持浮点数的类型有FLOAT、DOUBLE和DECIMAL类型,DECIMAL 类型不同于FLOAT和DOUBLE,DECIMAL 实际是以串存放的。DECIMAL 可能的最大取值范围与DOUB...
    99+
    2024-04-02
  • JavaScript中标识符的命名规则简单介绍
    本篇内容主要讲解“JavaScript中标识符的命名规则简单介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中标识符的命名规则简单介绍”吧...
    99+
    2024-04-02
  • PHP判断金花中的散牌(杂六)、对子、半顺、顺子、豹子,比较简单的算法
    PHP判断金花中的散牌(杂六)、对子、半顺、顺子、豹子,比较简单的算法 直接上代码 $fengeStr = "234";$orderArray = str_split($fengeStr);if($o...
    99+
    2023-09-01
    php
  • JavaScript中基本排序算法定义与效率比较的示例分析
    这篇文章主要介绍JavaScript中基本排序算法定义与效率比较的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、数组测试平台javascript数据结构与算法--基本排序...
    99+
    2024-04-02
  • python中超简单的字符分割算法记录(车牌识别、仪表识别等)
    背景 在诸如车牌识别,数字仪表识别等问题中,最关键的就是将单个的字符分割开来再分别进行识别,如下图。最近刚好用到,就自己写了一个简单地算法进行字符分割,来记录一下。 图像预处理 彩...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作