IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    JavaScript 的怪癖 3:标准的等号 (==)

    justjavac (justjavac@gmail.com)发表于 2013-04-26 00:00:00
    love 0

    原文:JavaScript quirk 3: normal equality (==)

    译文:JavaScript 的怪癖 3:标准的等号 (==)

    译者:iranw


    此文是 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?



沪ICP备19023445号-2号
友情链接