视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
javascript中,关于null是不是等于0问题的探讨
2020-11-27 20:16:07 责编:小采
文档


看见朋友们在讨论一个问题,说 null 到底和 0 是不是相等的。

听到这里,去写个 Demo 试一下。

为什么 console.log(null <= 0); 和 console.log(null >= 0); 这两条的判断是 true 呢?

首先我们来看一下 ES3 关于 内部相等性运算的算法实现。

接下来我们再来看一下 ES3 关于 内部关系运算的算法实现。

ES3 的 “>” 运算符:

ES3 的”>=” 运算符:

ES3 的 “==” 运算符 :

根据资料得出的内容

  1. 关系运算符 和 相等运算符 并不是一个类别的.

  2. 关系运算符,在设计上,总是需要运算元尝试转为一个number . 而相等运算符在设计上,则没有这方面的考虑.

  3. 最重要的一点, 不要把 拿 a > b , a == b 的结果 想当然的去和 a >= b 建立联系. 正确的符合最初设计思想的关系是 a > b 与 a >= b是一组 . a == b 和其他相等运算符才是一组. 比如 a === b , a != b, a !== b .

那么我们就可以反过来看这个问题了。

结果为 false, 
null >= 0 // null 尝试转为number ,则为0 , 结果为 true. 
null == 0 // null在设计上,在此处不尝试转型. 所以 结果为false.

a >= b 运算符只是简单的去对 a < b的结果取反. 我以为这是一个设计上的失误的另一个理由是 undefined,在标准中,被单拎出来.细心的你,也一定发现了这一点. 对于undefined的设计, undefined > 0 , undefined < 0, undefined == 0 的结果是符合设计上,逻辑的一致性的. 而null是被遗漏的东西.直到今天早上.重新翻阅了ES3,5.相关章节. 才恍然大悟自己没有从根本上理解到这个问题.

另外一个例子

下载本文
显示全文
专题