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

介绍

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

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

<李>

抽象相等比较

<李>

严格相等比较

<李>

SameValueZero

<李>

SameValue

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

参见下表:

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

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

<李>

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

<李>

是否会发生类型转换

<李>

对南0 + 0(即0)这些值是否存在特殊处理

下面给出一个总结:

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

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

<强>类型转换如何进行的?

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

举个例子:

 1,==, 1,//,真正的(未发生类型转换),& # 39;1 & # 39;,==,1,//,真实(发生了类型转换)

第一个比较为真的,好理解;第二个就不一样了,会发生类型转换,终止,和终止,将非数字值转为数字:& # 39;1 & # 39;跟1比较,两者类型不同,& # 39;1 & # 39;,是字符串,因此会先转为数字,终止,和终止,也就是1((& # 39;1 & # 39;)),结果变为两个1在一起比较,结果就是真实的了。

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

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

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

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

<强>南,0和+ 0是如何被特殊处理的?

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

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

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

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

 Object.is(南,南),//,true  Object.is(0, 0),//,假

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

就是说:

 var  array =,(南,,0),array.includes(南),//,true  array.includes(0),//,真正的

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

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

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