上个小问题

[] > []
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

js中相等、大小 不同类型之间是如何进行对比的。的更多相关文章

  1. JS中String类型转换Date类型 并 计算时间差

    JS中String类型转换Date类型 1.比较常用的方法,但繁琐,参考如下:主要使用Date的构造方法:Date(int year , int month , int day)<script& ...

  2. js中判断对象具体类型

    大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...

  3. 判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解

    提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以 ...

  4. js中推断对象详细类型

    大家可能知道js中推断对象类型能够用typeof来推断. 看以下的情况 <script> alert(typeof 1);//number alert(typeof "2&quo ...

  5. js中时间大小的比较

    今天在前台做到一个需要比较两个日期大小的地方,乍一看,发现一个比较奇怪地地方: var t1 = new Date(2018,1,1), t2 = new Date(2018,1,1); consol ...

  6. js中获取当前浏览器类型

    本文为博主原创,转载请注明出处: 在应用POI进行导出时,先应用POI进行数据封装,将数据封装到Excel中,然后在进行download下载操作,从而完成 POI导出操作.由于在download操作时 ...

  7. java和js中JSONObject,JSONArray,Map,String之间转换

    --------------------------------------------------Java中--------------------------------------------- ...

  8. js中判断一个对象的类型的种种方法

    javascript中检测对象的类型的运算符有:typeof.constructor.instanceof. typeof:typeof是一个一元运算符,返回结果是一个说明运算数类型的字符串.如:&q ...

  9. js中回调函数,promise 以及 async/await 的对比用法 对比!!!

    在编程项目中,我们常需要用到回调的做法来实现部分功能,那么在js中我们有哪些方法来实现回调的? 方法1:回调函数 首先要定义这个函数,然后才能利用回调函数来调用! login: function (f ...

随机推荐

  1. Class-dump 安装和使用记录(导出应用的头文件)

    class-dump算是逆向工程中一个入门级的工具,可以很方便的导出程序头文件,可以轻松的了解程序结构方便逆向.安装包下载地址:http://stevenygard.com/projects/clas ...

  2. 互评Beta版本(Hello World!——SkyHunter)

    1 基于NABCD评论作品,及改进建议 SkyHunter这款游戏我很喜欢,小时候总玩飞机类的游戏,这款游戏我上课的时候试玩了,在我电脑上运行是很好玩的,音乐震撼,画面玄幻,富有金属音乐的味道,游戏内 ...

  3. 2018-2019-20172321 《Java软件结构与数据结构》第六周学习总结

    2018-2019-20172321 <Java软件结构与数据结构>第六周学习总结 教材学习内容总结 第10章 树 10.1概述 树由一个包含结点和边的集构成,其中的元素被储存在这些结点中 ...

  4. 20172308 实验一《Java开发环境的熟悉》实验报告

    20172308 2017-2018-2 <程序设计与数据结构>实验1报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 周亚杰 学号:20172308 实验教师:王 ...

  5. 第二次作业<2>

    自学计划 应为对网络的教程并不了解,所以-- 我扒了一遍同学的博客,找到了两个课程. 慕课网 和 这个. 选择这两个教程主要是深入浅出,比较合理. 开始先两个课程相互应证,多了解以后可能会选择一个.虽 ...

  6. 图论 Kruskal算法 并查集

    #include<iostream> #include<cstring> #include<string> #include<cstdio> #incl ...

  7. Hibernate 延迟加载 分析

    出处:http://www.ibm.com/developerworks/cn/java/j-lo-hibernatelazy/#icomments Hibernate 的延迟加载(lazy load ...

  8. Unity3D游戏开发——物品存储:List与Dictionary

    本篇简介 本文介绍如何将碰撞处理后的物体存储在管理器中,分别用到两种不同的数据结构--List和Dictionary.我们将继续在上一篇博客的编程基础上进行完善. List和Dictionary的区别 ...

  9. Java 多线程之:偏向锁,轻量级锁,重量级锁

    一:java多线程互斥,和java多线程引入偏向锁和轻量级锁的原因? --->synchronized的重量级别的锁,就是在线程运行到该代码块的时候,让程序的运行级别从用户态切换到内核态,把所有 ...

  10. iOS开发值得收藏的博客

    http://kobedai.me/ objc.io PS:经典,内容深而广objc中国NSHipster PS:很多小细节NSHipster 中文版唐巧的技术博客 PS:LZ是唐巧的脑残粉…OneV ...