js简单类型的比较运算规则

JavaScript中6种值为false

0  // (数字0)""  // (空字符串)nullundefinedNaNfalse// 以上6种值为false

值的比较

一、 比较运算符

比较运算符在逻辑语句中使用,用以测定变量或值是否相等
例:x = 5 (比较的结果为Boolean类型!!!)

运算符描述比较返回值
==等于x == 8false
===绝对等于(值和类型均相等)x === ‘5’false
!=不等于x != 8true
!==不绝对等于(值和类型有一个不相等,或两个都不相等)x !== ‘5’true
>大于x > 8false
<小于x < 8true
>=大于或等于x >= 8false
<=小于或等于x <= 8true

二、比较规则

非严格相等运算符比较(隐式转换)

1. NaN与任何数字比较都不相等(包括它自身)
  • 没有隐式转换,无条件返回false
NaN == NaN  // false
NaN == Infinity  // false
2. 比较的两方是string, boolean, number类型
  • 隐式转换,会将不是数字类型的转换为数字再比较
1 == true // true
1 == 'true' // false   Number('true') = NaN
1 == !'true' // false
3. null 和 undefined
  • 使用非严格相等 == 比较二者时,JavaScript存在一个特殊的规则,会判断它们相等,不能将它们转换为任何值
null == undefined  // true 
  • 使用严格相等 === 比较二者时,它们不相等,因为它们属于不同的类型
null === undefined // false  
  • 使用其他比较方法 <, >, <=, >= 时,nullundefined会被转换为数字。
  • null 被转换为0,undefined被转换为NaN
null
null > 0 // false
null == 0 // false
null  >= 0 // true
undefined
undefined > 0 // false
undefined == 0 // false
undefined < 0 // false

字符串比较

  • 在比较字符串的大小时,JavaScript会使用“字典”(dictionary)或“词典”(lexicographical)顺序进行判定。
  • 换言之,字符串是按字符(母)逐个进行比较的
'Z' > 'A'  // true
'James' > 'Kobe' // false
'Glow' > 'Glee' // true
'James' > 'Jame' // true
// 特殊
'a' > 'A' // true
  • 字串的比较算法:

在上面的例子中,‘z’ > ‘A’ 在比较算法中,第一步就得到结果,‘James’ > ‘Kobe’ 也是第一步就得到结果了,而后两行字符串比较则继续逐个字符比较:

然而有个特别之处,‘a’ > ‘A’ 为true

三、总结

  • 比较运算符始终返回布尔值
  • NaN与任何数字比较都不相等(包括NaN本身)
  • 对不同类型的值进行比较时,会先将它们转换为数字(不包括严格相等===),再进行比较
  • 再非严格相等==情况,null 和 undefined 相等,但是不等于其他任何值(非严格相等情况下,null和undefined不会转换为任何值)
  • 字符串比较,会按照‘词典’顺序逐字的比较大小

本文借鉴:
现代 JavaScript 教程 — 学会不同类型值的比较

本文链接:https://my.lmcjl.com/post/16568.html

展开阅读全文

4 评论

留下您的评论.