前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊一聊相等运算与 SameValue

聊一聊相等运算与 SameValue

作者头像
IMWeb前端团队
发布2019-12-04 16:21:30
9400
发布2019-12-04 16:21:30
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

本文作者:IMWeb etoileli 原文出处:IMWeb社区 未经同意,禁止转载

变量的运算是日常开发中必须且频繁接触的内容。

其中 相等运算符 可算是使用频率最高的运算符。

除了直接使用之外,我们平常使用的过滤、映射、排序等等,当然都会进行值的比较。

类型转换

有一定基础的开发中都知道,

JavaScript 中使用相等运算符,会进行类型转换,

举个例子:

代码语言:javascript
复制
'1' == 1 // true
true == 1 // true

类型转换,在开发上,有时候会带给我们一些便利。

例如少写几句代码:)

但类型转换也会隐藏陷阱,就像下面的例子:

代码语言:javascript
复制
'0' == 0 // true
!!'0' == 0 // false

假设字符串 0 跟 数字 0 均使用变量,

就会写出非常不直观,不符合直觉的代码:

代码语言:javascript
复制
a == b // true
!!a == b // false

当然,如果我们使用了 === 全等运算符,就可以避免掉坑啦。

所以,在日常工作中,要多使用 === 哦。

SameValue 与 SameValueZero

SameValueSameValueZero 会被成对提及的内容。

这两个玩意是用来做什么的呢?

SameValueSameValueZero 其实是 ecma 中,比较值是否相等的算法,具体参考如下:

SameValuehttp://ecma-international.org/ecma-262/6.0/#sec-samevalue

SameValueZerohttp://ecma-international.org/ecma-262/6.0/#sec-samevaluezero

SameValueSameValueZero 是为了解决什么问题的嗯?

举个例子,我们都知道 NaN 的定义是与任何其他值均不相等。

因此,就会有以下结果:

代码语言:javascript
复制
NaN == NaN // false
NaN === NaN // false

有的时候,我们还是希望可以判断 NaN ,因此就诞生了 SameValue

代码语言:javascript
复制
SameValue(NaN, NaN); // true

SameValue 就像字面意思 Same Value ~

所以,对于 +0-0 则会认为是不同的值:

代码语言:javascript
复制
+0 == -0 // true
+0 === -0 // true
SameValue(+0, -0); // false

以上两种情况,就是 SameValue=== 不同的地方。(判断 NaN,+0,-0 时)

那么还有,SameValueZero

使用 SameValueZero 的话,对于 +0-0 则会认为是同一个值:

代码语言:javascript
复制
+0 == -0 // true
+0 === -0 // true
SameValue(+0, -0); // false
SameValueZero(+0, -0); // true

所以, SameValueZero=== 只有一个不是的情况。(判断 NaN 时)

lodash

我们经常使用的 lodash,也有大量使用 SameValueZero,有兴趣的同学,可以都了解一下~

以上就是关于相等运算与 SameValue的内容,谢谢。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类型转换
  • SameValue 与 SameValueZero
  • lodash
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档