怪癖 3:标准的等号 (==)
发布在JavaScript的12个怪癖(quirks)2013年10月15日view:3328
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

此文是 javascript 的 12 个怪癖(quirks) 系列的第三篇。

本系列文章托管在 github:https://github.com/justjavac/12-javascript-quirks,您可以通过 pull reqeust 的方式参与翻译。

让我们先看一个简单的例子: 由于一般的等于符号 ==!=经常会出现问题,以至于我们不得不使用严格等于(===!==)。 当然有人说这些规则也有例外,我不同意这个观点2。 怀揣的这个问题,我们现在就来看一下这个奇怪的现象:== 是不必要。

这个“正常”的等号(==)有很多怪癖。 虽然他很宽容(非严格比较),当与真值或者假值比较时,它会忽略类型(详见怪癖1):

> 0 == false  // OK
true
> 1 == true  // OK
true
> 2 == true  // not OK
false

> '' == false  // OK
true
> '1' == true  // OK
true
> '2' == true  // not OK
false

除了这些,我们设置可以把那些明显不能比较的值进行比较(我勒个去~~比较的结果居然还是 true):

> '' == 0
true
> '\n  123  \t' == 123
true

最后一次比较返回是 true,因为在 javascript 中把字符串转换数字类型时,会过滤掉首尾空白字符。 如果你仍然对关于 == 怎么工作感兴趣,你可以读读这篇文章。 对于严格比较符(===),不同类型的值比较是不相等的 1。也就是说试用严格比较符号,上诉的问题都不复存在。

参考文献:

  1. Equality in JavaScript: === versus ==

  2. When is it OK to use == in JavaScript?

评论
发表评论
暂无评论
WRITTEN BY
justjavac(迷渡)
☑辍学生 ☑极客 ☑码农 正在出版「代码之谜」,正在翻译「Javascript Quirks」。 http://justjavac.com
TA的新浪微博
PUBLISHED IN
JavaScript的12个怪癖(quirks)

实际上 javascript 是一个相当简洁的语言,但是也难免会有一些怪癖(quirks)。

本系列文章,需要您了解 ECMAScript 5 和 javascript 的基本知识,凡涉及到比较复杂的,文章中将会给出解释。

本系列文章托管在 github:https://github.com/justjavac/12-javascript-quirks,您可以通过 pull reqeust 的方式参与翻译。

参考资料:ECMAScript: ES.next versus ES 6 versus ES Harmony (中文)

我的收藏