前言
在对接接口时,有小伙伴把某些字段值用字符串返回了,导致前端这边校验与平时个人规范的有出入,遇到了一点小延伸,记录一下点滴。
分析
数字比较 1>0 //true
字符串比较 '1'>'0' // true
数字比较 2 > 1 // true
字符串比较 '2' > '1' // true
数字比较 2 > 11 // false
字符串比较 '2' > '11' // true
出现了,'2' 大于 '11' 为 true , 问题来了,2不应该大于11 吗?
javascript字符串在进行大小比较时,会根据第一个不同的字符的 ASCII 码值进行比较,当数字 与字符串比较大小时,会强制的将字符串(string)转换成数字(number)然后再进行比较。
即是说在同是数字的时候确实是 2 小于 11, 但是在同是字符串的时候,首先左边第一位的是 '2' 转换成 0000 0010(二进制) 与右边第一位 '1' 转换成 0000 0001 (二进制) 做比较大小,然后,再按后面的位置一一对应比较。位数不够的自动补为 0
数字比较 1=='1' //true
数字比较 1==='1' // false
==比较时,如果一边是字符,一边是数字,会先将字符串转换成数字再进行比较;
===比较时,不会进行类型转换,会比较类型是否相等。
要注意的是 NaN与任何值(包括它自己)比较时都是false
特殊情况的栗子:
NaN==undefined // false
NaN==null // false
NaN==NaN // false
NaN===NaN // false
null==undefined // true
null===undefined //false
null===null //true
undefined===undefined // true
结语
写到最后总结得差不多了,后续如果我想起还有哪些JS字符串的比较遗漏的,会继续在这篇文章上补全,同时也希望各位倔友对文章里的要点进行补充或者提出自己的见解。欢迎在下方进行评论或补充喔,喜欢的点个赞或收个藏,保证你在开发时用得上。
最后送大家一个键盘!
(_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["Bs","Tab","Caps","Enter"][p++]||'Shift',p])}\\|`,m+=y+(x+' ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join`
`)()
专栏文章
专栏文章
《前端汇总》系列
- 前端汇总系列:npm依赖(构建编译) 强烈推荐收藏
- 前端汇总系列:npm依赖(框架平台) 强烈推荐收藏
- 前端汇总系列:npm依赖(类库工具) 强烈推荐收藏
《灵活运用》系列
- 灵活运用CSS开发技巧 强烈推荐收藏
- 灵活运用JS开发技巧 强烈推荐收藏
- 灵活运用PS切图技巧 强烈推荐收藏
随笔系列
- 一个零配置开箱即用的React/Vue应用自动化构建脚手架 强烈推荐使用
- 前端性能优化指南 强烈推荐收藏
- 详细判断浏览器运行环境 强烈推荐收藏
- H5与App的通讯方式 强烈推荐收藏
点滴系列
- JS字符串的比较 强烈推荐收藏
教程系列
关注Uzero公众号,更多前端小干货等着你喔!