有下面一段代码,你尝试阅读一下,然后写下你认为的输出。

var test1 = '----------==----------\r\n';
test1 += '{}==\'\' \t\t:'           + ({} == '')           + '\r\n';
test1 += '{}==0 \t\t:'                + ({} == 0)              + '\r\n';
test1 += '{}==null \t\t:'         + ({} == null)           + '\r\n';
test1 += '{}==undefined \t:'      + ({} == undefined)      + '\r\n';
test1 += '{}==\'\\t\' \t\t:'        + ({} == '\t')         + '\r\n';
test1 += '\'\'==0 \t\t:'            + ('' == 0)                + '\r\n';
test1 += '\'\'==null \t\t:'         + ('' == null)         + '\r\n';
test1 += '\'\'==undefined \t:'      + ('' == undefined)        + '\r\n';
test1 += '\'\'==\'\\t\' \t\t:'        + ('' == '\t')           + '\r\n';
test1 += '0==null \t\t:'          + (0 == null)            + '\r\n';
test1 += '0==undefined \t:'           + (0 == undefined)       + '\r\n';
test1 += '0==\'\\t\' \t\t:'         + (0 == '\t')          + '\r\n';
test1 += 'null==undefined \t:'        + (null == undefined)    + '\r\n';
test1 += 'null==\'\\t\' \t\t:'      + (null == '\t')       + '\r\n';
test1 += 'undefined==\'\\t\' \t:'   + (undefined == '\t')  + '\r\n';
alert(test1);var test2 = '---------->=----------\r\n';
test2 += '{}>=\'\' \t\t:'         + ({} >= '')         + '\r\n';
test2 += '{}>=0 \t\t:'              + ({} >= 0)                + '\r\n';
test2 += '{}>=null \t\t:'           + ({} >= null)         + '\r\n';
test2 += '{}>=undefined \t:'        + ({} >= undefined)        + '\r\n';
test2 += '{}>=\'\\t\' \t\t:'      + ({} >= '\t')           + '\r\n';
test2 += '\'\'>=0 \t\t:'          + ('' >= 0)              + '\r\n';
test2 += '\'\'>=null \t\t:'           + ('' >= null)           + '\r\n';
test2 += '\'\'>=undefined \t:'        + ('' >= undefined)      + '\r\n';
test2 += '\'\'>=\'\\t\' \t\t:'      + ('' >= '\t')         + '\r\n';
test2 += '0>=null \t\t:'            + (0 >= null)          + '\r\n';
test2 += '0>=undefined \t:'         + (0 >= undefined)     + '\r\n';
test2 += '0>=\'\\t\' \t\t:'           + (0 >= '\t')            + '\r\n';
test2 += 'null>=undefined \t:'      + (null >= undefined)  + '\r\n';
test2 += 'null>=\'\\t\' \t\t:'        + (null >= '\t')     + '\r\n';
test2 += 'undefined>=\'\\t\' \t:' + (undefined >= '\t')    + '\r\n';
test2 += '---------->-----------\r\n'
test2 += '{}>\'\' \t\t:'           + ({} > '')               + '\r\n';
test2 += '{}>0 \t\t:'                + ({} > 0)              + '\r\n';
test2 += '{}>null \t\t:'         + ({} > null)           + '\r\n';
test2 += '{}>undefined \t:'          + ({} > undefined)      + '\r\n';
test2 += '{}>\'\\t\' \t\t:'            + ({} > '\t')         + '\r\n';
test2 += '\'\'>0 \t\t:'                + ('' > 0)                + '\r\n';
test2 += '\'\'>null \t\t:'         + ('' > null)         + '\r\n';
test2 += '\'\'>undefined \t:'      + ('' > undefined)        + '\r\n';
test2 += '\'\'>\'\\t\' \t\t:'        + ('' > '\t')           + '\r\n';
test2 += '0>null \t\t:'              + (0 > null)            + '\r\n';
test2 += '0>undefined \t:'           + (0 > undefined)       + '\r\n';
test2 += '0>\'\\t\' \t\t:'         + (0 > '\t')          + '\r\n';
test2 += 'null>undefined \t:'        + (null > undefined)    + '\r\n';
test2 += 'null>\'\\t\' \t\t:'      + (null > '\t')           + '\r\n';
test2 += 'undefined>\'\\t\' \t:'   + (undefined > '\t')  + '\r\n';
alert(test2);var test3 = '----------<=----------\r\n';
test3 += '{}<=\'\' \t\t:'         + ({} <= '')         + '\r\n';
test3 += '{}<=0 \t\t:'              + ({} <= 0)                + '\r\n';
test3 += '{}<=null \t\t:'           + ({} <= null)         + '\r\n';
test3 += '{}<=undefined \t:'        + ({} <= undefined)        + '\r\n';
test3 += '{}<=\'\\t\' \t\t:'      + ({} <= '\t')           + '\r\n';
test3 += '\'\'<=0 \t\t:'          + ('' <= 0)              + '\r\n';
test3 += '\'\'<=null \t\t:'           + ('' <= null)           + '\r\n';
test3 += '\'\'<=undefined \t:'        + ('' <= undefined)      + '\r\n';
test3 += '\'\'<=\'\\t\' \t\t:'      + ('' <= '\t')         + '\r\n';
test3 += '0<=null \t\t:'            + (0 <= null)          + '\r\n';
test3 += '0<=undefined \t:'         + (0 <= undefined)     + '\r\n';
test3 += '0<=\'\\t\' \t\t:'           + (0 <= '\t')            + '\r\n';
test3 += 'null<=undefined \t:'      + (null <= undefined)  + '\r\n';
test3 += 'null<=\'\\t\' \t\t:'        + (null <= '\t')     + '\r\n';
test3 += 'undefined<=\'\\t\' \t:' + (undefined <= '\t')    + '\r\n';
test3 += '----------<-----------\r\n'
test3 += '{}<\'\' \t\t:'           + ({} < '')               + '\r\n';
test3 += '{}<0 \t\t:'                + ({} < 0)              + '\r\n';
test3 += '{}<null \t\t:'         + ({} < null)           + '\r\n';
test3 += '{}<undefined \t:'          + ({} < undefined)      + '\r\n';
test3 += '{}<\'\\t\' \t\t:'            + ({} < '\t')         + '\r\n';
test3 += '\'\'<0 \t\t:'                + ('' < 0)                + '\r\n';
test3 += '\'\'<null \t\t:'         + ('' < null)         + '\r\n';
test3 += '\'\'<undefined \t:'      + ('' < undefined)        + '\r\n';
test3 += '\'\'<\'\\t\' \t\t:'        + ('' < '\t')           + '\r\n';
test3 += '0<null \t\t:'              + (0 < null)            + '\r\n';
test3 += '0<undefined \t:'           + (0 < undefined)       + '\r\n';
test3 += '0<\'\\t\' \t\t:'         + (0 < '\t')          + '\r\n';
test3 += 'null<undefined \t:'        + (null < undefined)    + '\r\n';
test3 += 'null<\'\\t\' \t\t:'      + (null < '\t')           + '\r\n';
test3 += 'undefined<\'\\t\' \t:'   + (undefined < '\t')  + '\r\n';
alert(test3);

我们看一下运行的结果。

这里的三个true的有点让人摸不着头脑,另外,还有0=='\r\n'也是为true的。

也许你会讲,用绝对判断(===,!==)就可以了,没错,在判断是否相等的情况下,绝对判断是可以的,但下面的结果会更让你吃惊。

这里面需要动动脑筋思考一下的,有些是正确的,但结合上面的等价判断有些确实让人莫名其妙。

比如说:

1.

''==null 是 false

''>null 和 ''<null也是false

可是''>=null 和''<=null居然是true,完全不符合逻辑。

2.

0和null 的对比和上面是一样的情况

3.

null==undefined是true

可是null>=undefined及null<=undefined居然都是false

4.

null和'\t'的对比和1,2是一样的情况

可见>=和<=的逻辑和我们对其它语言的理解不一样,具体原因本人尚不清楚。



转载于:https://www.cnblogs.com/amoxoo/archive/2010/12/15/doyouknowjscomareoperator.html

你真的了解JavaScript的比较运算符(==,!=,===,!===,=,=,,)吗?相关推荐

  1. JavaScript中delete运算符

    JavaScript中delete运算符是 从对象中删除一个属性,或从数组中删除一个元素. 使用方法: delete expressionwww.mlybyby.com expression 参数是一 ...

  2. JavaScript中的运算符和语句

    一.JavaScript的运算符 a.基本的算术运算符(+.-.*./.%) -.*./.%运算符会在必要的时候将操作数转换为数字,无法转换成数字的操作数将会转换成NaN,相应的运算结果也是NaN. ...

  3. 你真的了解javascript吗?(一)

    原题出处:JavaScript Puzzlers! 当初以为不过是一些小题目,结果做到怀疑人生,都要怀疑可能我javascript白学了.读者可以去试试. 不多说,直接上题: 第一题 ["1 ...

  4. JavaScript 之 特殊运算符

    一.=== 下面的规则用来判断两个值是否===相等: 首先,== equality 等同,=== identity 恒等.       ==, 两边值类型不同的时候,要先进行类型转换,再比较.     ...

  5. JavaScript入门(part6)--运算符

    学习笔记,仅供参考,有错必纠 参考自:pink老师教案 文章目录 JavaScript入门 运算符 运算符的分类 算数运算符 递增和递减运算符 比较运算符 逻辑运算符 赋值运算符 运算符优先级 Jav ...

  6. Javascript 基础—变量 运算符

    经过找工作笔试的洗礼,感觉自己js语法方面掌握的不是很系统,今天来梳理下--变量以及运算符. 基础篇 和C语言的不同点:是一种弱类型语言,申明变量时不需要指定类型:变量名的命名方法也有不同:简单类型种 ...

  7. javascript进制转换_「js基础」JavaScript逻辑和位运算符归纳

    上一篇文章呢,我们讲述了JavaScript运算符中的关系运算符和逻辑运算符,那么紧接上一篇的文章我们今天来说说逻辑运算符. 引言 逻辑运算符不是很难,也不是很多,我们只要记住三个就可以啦!分别是: ...

  8. JavaScript权威设计--JavaScript表达式与运算符(简要学习笔记五)

    1.3种原始表达式 1.直接量:    1.23    //数字直接量 "hello"    //字符串直接量 ... 2.保留字构成的原始表达式: true    //返回布尔值 ...

  9. javascript中的||运算符

    在Java和c++中||运算符返回的结果为布尔值,而在JavaScript中,||不一定返回布尔结果,它的运算规则为:返回第一个不为false的那个值(对象亦可),或者是返回最后一个值(如果全部都是f ...

最新文章

  1. 〖Linux〗Bash快捷键使用
  2. JWT(JSON Web Token) Java与.Net简单编码实现
  3. 零基础学习Java开发,这些学习笔记送给你!
  4. 通过城市联动实时将地址显示到text中
  5. java.sql.SQLException: connection disabled
  6. 某物流集团企业信息化案例介绍
  7. Adaboost算法的学习笔记~
  8. Linux中如何让进程在后台运行
  9. duilib的通用窗口类WindowImplBase
  10. 戴口罩人脸数据集和戴口罩人脸生成方法
  11. MyBatis简介及下载
  12. dnf一天能获得多少黑暗之眼_DNF:想快速积累史诗狗眼?这几个方法可别错过,一天最少四五个...
  13. oracle 客户端 ora-12162,oracle 连接不上ORA-12162: TNS:net service name is incorrectly specified的另外一种可能原因...
  14. 文献html阅读器,强烈推荐文献阅读器CAJviewer——大学生阅读文献、论文必备工具!!!...
  15. java计算1900到2015共有多少天?
  16. C++试卷(程序设计题)
  17. usnews美国大学计算机排名2021,2021年USNEWS美国大学计算机
  18. 华为 HCIA-Cloud Computing V4.0(基础知识)
  19. Git安装教程(详细)
  20. mac lion 系统安装

热门文章

  1. 事件响应政策制定常见雷区,都踩了我就只能祝福你了……
  2. 2556. [NOIP2016]玩具谜题
  3. 十、Sumif 函数
  4. Java7中的switch支持String的实现细节
  5. 初涉程序员之路的感悟
  6. 15种网站最差的用户体验
  7. 通过js获取元素css3的transform rotate旋转角度方法
  8. 【GoLang】转载:我为什么放弃Go语言,哈哈
  9. Delphi APP 開發入門(五)GPS 定位功能
  10. SQL Server性能计数器部署(批量)