zoukankan      html  css  js  c++  java
  • js中相等、大小 不同类型之间是如何进行对比的。

    上个小问题

    [] > [] 
    false
    [] < []
    false
    [] == []
    false // why?
    

    再上个加强版

    '6xxx' < '5xx'
    false
    '6xxx' > '5xx'
    true
    '6xxx' > 5
    false// why?
    '6xxx' < 5
    false//why?
    

    1. 相等判断,两个等号

    数组是被构造函数Array “new”出来的对象(见:[].constructor),那么“==”判断对象相等,是需要判断他们的引用
    所以:
    
        [] == []
        //false
        {} == {}
        //false
        var a = function(){ return '';}, 
            b = function(){ return '';};
        a == b
        //false
        new Number(10) == new Number(10)
        //false   
        null == null//why?
        //true
    
    • 特殊的对象null:

      typeof null => 'object',但由于null是个tongyi特殊的对象,不是由构造函数Object创建而来,所以null instanceof Object => false
      假设有null的构造函数 null = new Null();那么null == null(同个对象引用), new Null() != new Null()

      综上,[] == [] 为false

    2. 大小判断

    先上代码,再解释

        true > false/
        //true
        true < false
        //false
    
        [1] > 0
        //true
        [3] > [2]
        //true
        [1,3] > 0
        //false
        [1,3] < 0
        //false
        [1,3] > [2,4]
        //false
    
    过程中有个隐式的转换
        布尔值、undefined、null使用Number()转为数值,
        如一方为数值,将非数值使用Number()转为数值
        双方都非Number,进行toString()后,进行字符串对比大小。 
    

    上代码先:

    //调用toString转换,
    var StrObj = { toString : function(){ return '5xx' } },
        NumObj = { toString : function(){ return 5 } };
        [StrObj > 4,NumObj > 4] //既 ['5xx' > 4,5 > 4]
        //false,true
        [StrObj < 6,NumObj < 6]
        //false,true
    
    'a' < 'b'//没有使用Number或parseInt,不然以NaN进行大小对比,字符串的对比似乎进行charCode对比?
    //true
    'ab' < 'aa'//  第一个字符相等,判断第二个字符
    //false
    'ab' < 'az'
    //true
    
    '5' < '5'// 以字符串的方式来对比了,
    //false
    '5a' < '5b'
    //true
    
    '6xx' > 5  
    //false
    '6xx' < 6
    //false
    '5xx' < '6xx'
    //false
    '5xx' > '6xx'
    //false
    
    

    所以回归开头的小例子,对比过程如下

        [] > [] //  ([]).toString() > ([]).toString()
        [] < [] // ([]).toString() < ([]).toString()
        [] == [] // new Array() == new Array()
    
    
    '6xxx' < '5xx'//  字符串的对比,6大于5,所以不需要对比后面的了
    '6xxx' > '5xx'// 
    '6xxx' > 5// NaN 与 5
    
  • 相关阅读:
    VC 多文档用户界面设计
    如何把Windows7 库 更改成 我的电脑
    解决多文档程序框架中建立新的子框架类后出现“创建空文档失败”的问题
    我们从UNIX之父Dennis Ritchie​身上学到了什么
    在Unicode环境下读出和写入文件
    Android活动的生命周期
    Godaddy 上的域名服务器状态查询
    v8 javascript SHELL
    vim E492: Not an editor command: ^M
    Ubuntu 11.10不能使用USB安装的解决方法
  • 原文地址:https://www.cnblogs.com/henryli/p/4111887.html
Copyright © 2011-2022 走看看