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
js中相等、大小 不同类型之间是如何进行对比的。的更多相关文章
- JS中String类型转换Date类型 并 计算时间差
JS中String类型转换Date类型 1.比较常用的方法,但繁琐,参考如下:主要使用Date的构造方法:Date(int year , int month , int day)<script& ...
- js中判断对象具体类型
大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...
- 判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以 ...
- js中推断对象详细类型
大家可能知道js中推断对象类型能够用typeof来推断. 看以下的情况 <script> alert(typeof 1);//number alert(typeof "2&quo ...
- js中时间大小的比较
今天在前台做到一个需要比较两个日期大小的地方,乍一看,发现一个比较奇怪地地方: var t1 = new Date(2018,1,1), t2 = new Date(2018,1,1); consol ...
- js中获取当前浏览器类型
本文为博主原创,转载请注明出处: 在应用POI进行导出时,先应用POI进行数据封装,将数据封装到Excel中,然后在进行download下载操作,从而完成 POI导出操作.由于在download操作时 ...
- java和js中JSONObject,JSONArray,Map,String之间转换
--------------------------------------------------Java中--------------------------------------------- ...
- js中判断一个对象的类型的种种方法
javascript中检测对象的类型的运算符有:typeof.constructor.instanceof. typeof:typeof是一个一元运算符,返回结果是一个说明运算数类型的字符串.如:&q ...
- js中回调函数,promise 以及 async/await 的对比用法 对比!!!
在编程项目中,我们常需要用到回调的做法来实现部分功能,那么在js中我们有哪些方法来实现回调的? 方法1:回调函数 首先要定义这个函数,然后才能利用回调函数来调用! login: function (f ...
随机推荐
- awk之close函数
echo "21 2 " | awk '{ first[NR]=$ second[NR]=$ }END{ print "======打印第1列并排序:========== ...
- 自制session
原理 1.面向对象中通过索引的方式访问对象,需要内部实现 __getitem__ .__delitem__.__setitem__方法 2.Tornado框架中,默认执行Handler的get/pos ...
- JavaWeb项目通过调用cmd实现备份数据库的功能
1.别急着上车,先测试一下能否成功调用cmd,可以尝试通过cmd命令打开计算器,代码如下: 2.能成功打开计算器后,证明调用cmd的方法是没错的,现在把cmd命令字符串改成我们备份数据库的 命 ...
- 论如何制做一个工程APP的测试内容
测试一般在软件开发过程中就已经开始进行了,测试越早.发现问题解决他的方案成本就越小.测试按照类型来区分可以划分为:单元测试,集成测试,系统测试.而OCUNIT是XCODE自带的单元测试工具.需要建立新 ...
- [2019BUAA软工]第0次代码作业
Visual Studio 单元测试的简单应用 写在前面 笔者根据作业的介绍以及Visual Studio 2017 文档的相关说明,进行了Visual Studio 单元测试的简单应用. Tip ...
- js弹出框 -搜索
警告框alert() alert是警告框,只有一个按钮“确定”无返回值,警告框经常用于确保用户可以得到某些信息.当警告框出现后,用户需要点击确定按钮才能继续进行操作.语法:alert("文本 ...
- apm server
目录 1.apm的tomcat启动失败解决方法 2.apm的mysql修改root密码的方法 内容: 1.apm的tomcat启动失败解决方法 APMServ5.2.6 无法启动Apache的一个问题 ...
- Chapter 3 软件项目管理
软件项目具有产品的不可见性.项目的高度不确定性.软件过程的多变化性.软件人员的高流动性的显著特征.有效的软件项目管理集中于人员.产品.过程和项目四个方面.软件项目的生命周期有项目启动.项目规划.项目实 ...
- 软工1816 · Beta冲刺(1/7)
团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成beta冲刺阶段的任务安排 整理博客 接下来的计划 & 还剩下哪些 ...
- whu 1538 - B - Stones II 01背包
题目链接: http://acm.whu.edu.cn/land/problem/detail?problem_id=1538 Problem 1538 - B - Stones II Time Li ...