比较两个元素是否相同

本文探讨了如何在JavaScript中比较两个元素是否相等,重点关注underscore库中的_.isEqual函数。通过分析源码,分别讲解了Number、正则RegExp和String、Date与Boolean类型以及数组与对象类型的判断方法,揭示了在不同情况下如何确定两个元素的相等性,特别是对0和-0、NaN以及复杂类型的处理细节。
摘要由CSDN通过智能技术生成

比较两个元素是否相同

前言

之前就说过要读一下关于underscore.js的源码, 我就想先从某个函数开始读, 正好在github文章中(这里的文章我会在最后放上地址)提到了underscore中关于如何比较两个元素的是否相同, 我看完之后觉得很好玩。那么对于如何判断两个元素是否是相同呢?那么在什么程度上才算是相同, 举个例子: 1与1是相等的(当然他们前提是类型是一样的)那么1new Number(1)也应该相等。

underscore中有这么一个函数_.isEqual对没错, 就是这个。接下来我会以自己的知识来解释下, 这个函数的涉及的知识点。 如果有解释的不好的点, 请大家给我留言我一定改正。话不多说直接开始。

分析_.isEqual

Number类型判断

console.log( _.isEqual(a, b));

我首先在 _.isEqual中传入了两个参数a, b。首先明确两个概念: 其一是a, b都是基本类型, 那么两个基本类型的值相同。其二是两个是引用类型, 那么引用类型相同。如果a === b为true, 我们是否可以说a和b是相等的。但是这里有个特殊的就是0, -0。0与-0被浏览器认为是相等的。正确来讲0与-0是不相等的(关于这里我是看了文章里面有提到, 我在控制台打印了下, 发现很神奇)。关于这里_.isEqual这样处理的。

  if (a === b) return a !== 0 || 1 / a === 1 / b;

我理解是这样的: 这里过滤了99%情况, 但是没有过滤掉0与-0的情况。但是return里面如果a是0, 直接就return false结束。还有就是a如果为-0呢?第一个条件满足, 我们看第二个 1 / a(-0) === -Infinity1 / b(0) === Infinity;所以第二个条件也不满足, 那么直接返回return false. ------游戏结束。上面这种判断处理就是针对0与-0这种情况。
接下来就是 a !== b
如果a或者b其中有一个为null或者是unde

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值