你真的了解比较运算符吗

646 阅读3分钟

作为前端初学者,学到比较运算符感觉里面的细节还是比较多的,也不晓得项目开发中用的是否多,但是大致看了一些面试题,发现面试中考比较运算符频率还是比较高的,作为WEB萌新来整理一下自己所学,希望大佬们指正。

比较运算符基础

比较运算符有哪些呢?

  • 大小比较: > < >= <=
  • 相等比较: == != === !==

比较运算符返回类型

比较运算符返回类型是:Boolean类型

比较运算符优先级

算术运算符的优先级高于比较运算符

var x = 1 + 2 > 4 * 5; // 先计算出来值,在进行比较
console.log(x); // false

比较运算符大小比较

细节

  1. 比较运算符俩侧都是字符串,那么比较的是字符编码(ASCII)

ASCII码可以直接百度一下,会有对应的ASCII码表,大家可以自行看一下,如果遇到俩侧都是字符串那么久可以用了。

console.log("1" > "2"); // fasle "1"转化为编码为49,"2"转化后为50
console.log('AB' > 'AC'); // false
console.log("11" > "1"); // true
console.log("2" > "11"); // true 
// 如果是俩位比较的话先比较第一个字符,如果第一个字符能比较出来大小那么结果就出来了,如果相等那么第二位开始进行比较。
  1. 如果一个不是字符串,并且俩个都是原始类型,那么都转化为数字进行比较
console.log("123" > true); // true
console.log(null > true); //flase

NaN和任何任何数字比较得到的结果都是false

console.log(true > undefined); // false

Infinity比任何数字都大

console.log(Infinity > 99999); // true;

-Inifinity比任何数字都小

console.log(-Infinity < -99999999) // true
  1. 如果其中一个是对象,那么先把对象转化为原始类型,在根据规则1或规则2进行比较

目前,对象转换为原始类型后,是字符串 "[object Object]"

console.log(3 > {}); // false

比较运算符相等比较

== 和 != (相等比较和不相等比较)

==: 比较两个数据是否相等 !=: 比较两个数据是否不相等

细节

  1. 两端的类型相同,直接比较两个数据本身是否相同(两个对象比较的地址)
console.log(1 == 1); // true
console.log("1" == "2"); // false
console.log({} == {}) // false 对象比较的是地址
  1. 两端的类型不同

1). null 和 undefined, 它们之间相等, 和其他原始类型比较, 则不相等。 2). 其他原始类型,比较时先转换为数字,再进行比较 3). NaN与任何数字比较,都是false,包括自身 4). Infinity和-Infinity,只能和自身相等 5). 对象比较时,要先转换为原始类型后,再进行比较

由于相等和不相等比较,对于不同类型的数据比较违反直觉,因此,通常我们不适用这种比较方式,而是使用更加接近直觉的严格相等和严格不相等比较

=== 和 !== (严格相等 和 严格不相等)

=== : 两端的数据和类型必须相同 !== : 两端的数据或类型不相同

  1. 两端类型相同,规则和相等比较一致。
  2. 两端类型不同,为false。

数字规则:

1). NaN与任何数字比较,都是false,包括自身 2). Infinity和-Infinity,只能和自身相等

最后

对于比较运算符我了解的差不多也就这么多了,本博客有任何错误希望大家指正和补充,嗯,自己学习整理这篇内容用了差不多一天时间,码字不易,望点赞,如有错误,望指出,谢谢支持。 如果也有刚接触前端的小伙伴也欢迎加我微信(wangjianghua888666)共同学习,讨论,进步。

本文使用 mdnice 排版