众所周知,JS是一种弱类型的语言,在比较大小的时候对于比较值的类型的类型十分宽松,所以如果对于概念不是深入理解的话,经常会出现一些匪夷所思的错误。比如说:

>   1 < 2
\<   ture

  这是数的比较,十分容易理解,再比如数与字符串的比较:

>   1 < “2”
\<   ture

  因为JS会在比较的时候把判断符两端的值转换为相同的类型后在判断,再看一下以下示例:

>   “1” < “2”
\<   ture

  也许你会说,1 > 2 这还用你说吗?这肯定是对的啊!到底有没有干货啊!那么请再看一下以下示例:

>   “5” < “10”
\<   false

  什么?返回的不是ture吗?是的,你没有看错,5的确大于10了,JS没有按照基本法来。或者说JS没有按照大家印象里的基本法来。

JS  :"5"为什么要小于"10"?
小明: 5当然小于10 。我小学体育老师都知道!
JS  :但这是字符串 "5" 和 "10" 啊!
小明:字符串了不起啊,JS会自动转类型啊!
JS  :字符串在什么条件下自动转类型?
小明:纳尼?等等。。

  是啊,JS会在比较的时候把判断符两端的值转换为相同的类型后再判断。但如果类型已经相同呢?那还转个毛啊!!所以( “5”<”10” ) 比较的不是数值,而是字符串!

小明:字符串怎么比?请问还按基本法吗?
JS  : 拿头比!
小明:黑人问号???

  拿头比怎么比?以( “5”<”10” )为例,从左往右开始,5小于1?肯定不啊,好,左边比右边大,值为false,答问收工。纳尼??恩,基本法就是这样。再来:(“ABCD”<”ACAA”),好,从左往右,A等于A,嗯下一个,B小于C,恩,右边大,值为true,答完收工。所以说,”9”比”8999999999”都大?是滴,就是这样。

小明:。。。JS好恶心。。。
JS  : 这锅我不背。
小明:嘿嘿嘿
JS  : 好诡异的笑容,你想干哈?
小明:数字1和字符串"a"怎么比啊?  1 < "a" ?
JS  : 你试试啊!
小明:试试就试试,我擦,怎么全是false;true被你吃了啊?
JS  : 因为字符串"a"转不成数字啊
小明:转不成数字你倒是转ascii码啊?
JS  :但是1是数字不是字符串啊,不能转ascii码,我要一视同仁!
JS  : 我反问一句,这要是可以,1<"abc" 怎么比?"abc"转ascii码是多少?
小明:转就转,97,算的是头一个字符,想唬我,没那么容易!想想JS还真是不靠谱!
JS  : 不按基本法来,臣妾真的做不到啊!

  好了,是时候总结一波了。JS在做比较的时候,会先尝试把两边转为相同类型,如果不行就怎么比都是错,如果都是字符串,就从左到右按字符的ascii码,只要不同就是整个表达式的值。恩,简单无脑暴力一波带走。。。。
  文章有错还请不吝指教!

5大于10! JS 比较判断的总结相关推荐

  1. html js 添加数据类型,js数据类型判断和转换

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前言 无论笔试还是面试,总会问到数据类型和隐式转换.今天彻底整理一下这块的知识,希望对大家有帮助. 看到下面的题,是不是 ...

  2. js 正则表达式判断价格

    js 正则表达式判断价格 验证价格的正则 var reg = /(^1-9?(.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9].0-9?$)/; var money = 520.1 ...

  3. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  4. JS中判断对象是对象还是数组

    JS中判断对象是对象还是数组的方法 JS中判断对象是不是数组的方法 JavaScript中检测对象的方法  1.typeof操作符  这种方法对于一些常用的类型来说那算是毫无压力,比如Function ...

  5. js实现判断滚动条滚到页面底部并执行事件的方法

    这里我主要介绍JS实现判断滚动条滚到页面底部并执行事件的方法: 需要了解三个dom元素,分别是:clientHeight.offsetHeight.scrollTop. clientHeight:这个 ...

  6. JS准确判断身份证号码

    JS准确判断身份证号码 附带示意图 以及使用方法 //校验年月日专用isDate8(sDate) {if (!/^[0-9]{8}$/.test(sDate)) {return false;}var ...

  7. Js中判断变量存不存在的问题

    前面写过jquery对象存在与否的判断.现在谈下Js中判断变量存不存在的问题. 如果这样if(!a),当变量a在js中没有申明时,就会报错,那么接下去的代码将不会被执行.注意,这种判断只要变量申明过, ...

  8. java语言显示运算时间_JAVA语言之ACM日期计算:输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天...

    本文主要向大家介绍了JAVA语言之ACM日期计算:输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. ACM日期 ...

  9. js/jQuery判断浏览器名称、内核版本、浏览器壳

    1.js方法/* 判断浏览器名称和版本 目前只能判断:ie/firefox/chrome/opera/safari 2012年5月16日23:47:08 浏览器内核UA:UA; 浏览器内核名称:NV. ...

最新文章

  1. ZZ:new/delete 和malloc/free 的区别
  2. 就是好骑!骑ofo小黄蜂和舒畅早晨say hi,跟闹心堵车say bye
  3. C# 校验帮助类-正则表达式
  4. 2019年3月20日 894. All Possible Full Binary Trees
  5. 计算机网络复习_物理层
  6. 22张令人叹为观止的照片,你所未知的另一面
  7. 什么是心跳线?心跳线,主要用于主从服务器之间,是连接工作机与备份机的网线
  8. SQLite3中核心C API
  9. 14.bash(2) 与 环境变量
  10. Carrot2 聚类算法概要说明
  11. 存储过程和存储函数的区别
  12. JSOUP爬虫常见问题解决方法
  13. R语言 正态性检验 Q-Q plot shapiro test
  14. 含耦合电感元件的电路分析
  15. [渝粤教育] 西南科技大学 会计电算化 在线考试复习资料2021版
  16. win+r常用组合键大全
  17. 对keep-alive的理解是什么?
  18. 绝对让你怀疑人生的游戏榜,游戏建模跟《人类一败涂地》很相似
  19. EBS 并发请求 计划 fnd_conc_release_classes
  20. 软件测试相关简要记录

热门文章

  1. objective-c学习推荐网站
  2. 利用matlab摄像机标定
  3. vue3+ts实现视频根据时间轴截取
  4. 消息队列 Kafka的架构原理 (小白必看)
  5. 数字波束合成的一些理解
  6. (附源码)APP个人健康管理 毕业设计202031
  7. 智能家居叫好不叫座,让一部分人先用起来是关键
  8. BLDC无刷直流电机Simulink模型(数学方法搭建)
  9. HIT-2022春-软件构造 III 诗意的漫步
  10. c++同名函数----重载、隐藏、覆盖