0
点赞
收藏
分享

微信扫一扫

JavaScript操作符之关系操作符

关系操作符执行比较两个值的操作,包括小于(<)、大于(>)、小于等于(<=)和大于等于(>=),用法跟数学课上学的一样。这几个操作符都返回布尔值。

这个没什么好说的,学过数据的都知道。

let&nbsp;a&nbsp;=&nbsp;1
let&nbsp;b&nbsp;=&nbsp;2
let&nbsp;c&nbsp;=&nbsp;3
console.log(a&nbsp;&gt;&nbsp;b)
console.log(a&nbsp;&lt;&nbsp;b)
console.log(a&nbsp;+&nbsp;b&nbsp;&lt;=&nbsp;c)
console.log(a&nbsp;+&nbsp;b&nbsp;&gt;=&nbsp;c)

上面这种是针对数值的判断,但是现实中可能不这么美好,有时需要不同类型的也需要判断。

console.log(&quot;q&quot;&nbsp;&gt;&nbsp;&quot;b&quot;)
console.log({}&nbsp;&gt;&nbsp;&quot;b&quot;)
console.log({}&nbsp;&gt;&nbsp;[])
console.log(true&nbsp;&gt;&nbsp;false)

那么则遵循:

  • 如果操作数都是数值,则执行数值比较。
  • 如果操作数都是字符串,则逐个比较字符串中对应字符的编码。
  • 如果有任一操作数是数值,则将另一个操作数转换为数值,执行数值比较。
  • 如果有任一操作数是对象,则调用其 valueOf()方法,取得结果后再根据前面的规则执行比较。如果没有 valueOf()操作符,则调用 toString()方法,取得结果后再根据前面的规则执行比较。
  • 如果有任一操作数是布尔值,则将其转换为数值再执行比较。

很多人搞不懂字符串是怎么比较的,对字符串而言,关系操作符会比较字符串中对应字符的编码,而这些编码是数值。比较完之后,会返回布尔值。

比如小写a对应的字符编码是097,小写z对应的字符编码是122:

console.log(&quot;a&quot;&nbsp;&lt;&nbsp;&quot;z&quot;)&nbsp;&nbsp;// true
console.log(065&nbsp;&lt;&nbsp;090)&nbsp;&nbsp;// true

还有种情况是,如果一方是字符串(非数字字符串),另一方是数字

console.log(&quot;a&quot;&nbsp;&lt;&nbsp;3)&nbsp;&nbsp;
console.log(&quot;a&quot;&nbsp;&gt;=&nbsp;3)

根据上面规则,有一方是数字,另一方要转为数值,但是a不能转为数值,只能转为NaN,这里就有个很有意思的问题,我们常识是,如果一个数a不小于另外一个b,那么这个b一定大于等于a,但是在这里,我们通过控制台发现。

console.log(&quot;a&quot;&nbsp;&lt;&nbsp;3)&nbsp;&nbsp;&nbsp;// false
console.log(&quot;a&quot;&nbsp;&gt;=&nbsp;3)&nbsp;&nbsp;// false

所以这里要重点记下,任何值和NaN比较时,都会返回false。


举报

相关推荐

0 条评论