章节索引 :

JavaScript 比较运算符

比较运算符用于比较两个表达式的结果。如变量 num 加上变量 offset 是否大于0,大于就是一个比较运算符。

比较运算符还分为相等运算符关系运算符

相等运算符:

  • == 相等
  • != 不相等
  • === 严格相等
  • !== 严格不相等

关系运算符:

  • > 大于
  • >= 大于等于
  • < 小于
  • <= 小于等于

运算符返回的都是布尔值。

运算符左右的值也被称为操作数。

1. 相等运算符

相等运算符用于判断运算符左右两边的值是否一致。

很多资料也会把相等称为等于,严格相等被称作严格等于。

1.1 相等

相等运算符在进行比较的时候,如果两边操作数数据类型不同,则会尝试转换成相同的类型再进行比较,如果转换成相同类型后的值相同,则返回 true,否则返回 false。

如果比较的两个操作数是引用类型,则会比较内部的引用(是否引用同一个内存地址上的值)。

'3' == 3; // true
3 == '3'; // true

2 == 1; // false

3 + 2 == 5; // true

var obj1 = {a: 1};
obj1 == {a: 1}; //false

var obj2 = obj1;
obj1 == obj2; // true

undefined == null; // true

1 == true; // true
0 == false; // true

因为内容比较简单,推荐直接在控制台调试,可以快速看到结果。

具体的转化规则可以查阅隐式转换章节。

注意:相等会对不同类型的比较数据进行隐式转换,为了防止误导阅读代码的开发者对转换进行猜测,以及避免一些不可控的问题,大部分开发者会选择不使用相等。

1.2 不相等

不相等的比较机制和相等一致,类型相同直接比较,不相同的会尝试转换成相同类型,碰到引用类型则比较引用地址是否一致。区别就在于最后返回的结果与相等相反,比较结果如果不一致,则返回 true,一致则返回 false。

1 != 1; // false
1 != 2; // true

var obj1 = {a: 1};
obj1 != {a: 1}; // true

1.3 严格相等

严格相等在比较的时候,碰到两边的操作数类型不同,则会直接返回 false,不会进行类型的转换。

当类型一样时,则比较等号两边的值是否相等,相等则返回 true,否则返回 false。

1 === '1'; // false;

0 === false; // false

严格相等更加严格,程序中使用严格相等可以避免许多不可控的类型转换,特别是当开发者不熟悉转换规则时候,应尽可能使用严格相等。

1.4 严格不相等

严格不相等在比较的时候,如果两边的操作数不相等则返回 true,否则返回 false。其和严格相等一样,不会进行类型转换。

1 !== 1; // false
1 !== 2; // true

1 !== '1'; // true
undefined !== null; // true

注意:在做不相等运算的时候,也应该尽可能选择严格不相等,原因与建议使用严格相等一致。

2. 关系运算符

2.1 大于

大于运算符会在左操作数大于右操作数的时候返回 true,否则返回 false。

1 > 2; // false
2 > 2; // false
2 > 1; // true

2.2 大于等于

大于运算符会在左操作数大于等于右操作数的时候返回 true,否则返回 false。

1 >= 2; // false
3 >= 2; // true
2 >= 2; // true

2.3 小于

小于运算符会在左操作数小于右操作数的时候返回 true,否则返回 false。

1 < 2; // true
2 < 2; // false
3 < 2; // false

2.4 小于等于

小于等于运算符会在左操作数小于等于右操作数的时候返回 true,否则返回 false。

1 <= 2; // true
2 <= 2; // true
3 <= 2; // false

3. 注意点

3.1 字符串进行比较

假如比较运算符的两侧操作数都为字符串,则碰到中文,会将中文转化成对应的 Unicode 码,碰到英文则转化成对应的 ASCII 码,再对码值进行比较。

'a' > 'z'; // false

a 的 ASCII 码为 97,z 的 ASCII 码为 122,两者在比较的时候相当于是 97 > 122,结果就是 false。

如果碰到有多个字符,则会依次进行比较。

'aaaaaz' > 'aaaaaaaaa'; // true

两个操作数前五位都是 a,所以第六位才能决定出结果。

4. 小结

比较运算符主要用于比较两个值的大小关系,特别需要注意的是严格相等与相等的区别。

前置知识
什么是JavaScript 开发与学习环境准备 调试方案
基础
JavaScript 变量 JavaScript 数据类型 JavaScript if 语句 JavaScript for 语句 JavaScript 算数运算符 JavaScript 比较运算符 JavaScript 逻辑运算符 JavaScript 表达式 JavaScript 函数 JavaScript 对象 JavaScript 字符串 JavaScript 数字 JavaScript 数组 JavaScript switch 语句 JavaScript while 语句 JavaScript break与continue JavaScript with document.cookie
内置对象
JavaScript Function JavaScript Math JavaScript Date JavaScript RegExp JavaScript JSON
JavaScript 与 DOM
什么是DOM DOM和JavaScript的关系 获取和操作 DOM 节点 JavaScript DOM与事件 JavaScript DOM 事件绑定 JavaScript DOM 事件对象 JavaScript DOM 事件流 JavaScript DOM 事件优化 JavaScript DOM 自定义事件
表单处理
使用 JavaScript 校验表单
BOM
BOM window 对象 常用的 BOM 相关对象 BOM 常用属性和方法
AJAX
JavaScript AJAX
进阶知识
JavaScript 异常处理 JavaScript 三元运算符 JavaScript 逗号操作符 JavaScript void JavaScript typeof JavaScript delete JavaScript debugger JavaScript getter &setter JavaScript 原型 JavaScript new操作符和构造函数 JavaScript instanceof JavaScript this JavaScript 严格模式 JavaScript 作用域 JavaScript 闭包 JavaScript 变量提升 JavaScript 对象包装器
常用库
jQuery Lodash moment.js swiper
进阶指南
ECMAScript6 Node.js Babel CSS 预处理器 代码规范 TypeScript Web Components 小程序 Vue / React / Angular JavaScript 关键字
常见疑点与误区
分号问题 对象属性访问问题 this 使用问题 浮点数精度问题 独一无二的 NaN 避免全局污染 控制台观察对象问题 根据环境选择语言特性
扩展
相关资源