JS字符串的比较

10,094 阅读3分钟

前言

在对接接口时,有小伙伴把某些字段值用字符串返回了,导致前端这边校验与平时个人规范的有出入,遇到了一点小延伸,记录一下点滴。

分析

数字比较  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`
`)()

专栏文章

专栏文章

《前端汇总》系列

《灵活运用》系列

随笔系列

点滴系列

教程系列

关注Uzero公众号,更多前端小干货等着你喔!

wechat-pn.jpg