JavaScript比较运算符
比较运算符
比较运算符我们在数学中也总能看到,它们用于比较两个数值大小,在程序中也使用广泛,本篇文章主要讲解JS的比较运算符。
数值比较
比较的时候如果两边都是数值的话,那就特别简单的直接比较大小,而如果有一边不是数值的话,本质上是无法进行大小比较的,这时候JavaScript会有一个默认转换过程。所有的比较运算都会返回一个布尔值,即true(对)或false(错)。
在 JavaScript 中,它们的编写方式如下:
- 大于 / 小于:
a > b
,a < b
。 - 大于等于 / 小于等于:
a >= b
,a =< b
。 - 检查两个值的相等:
a == b
,请注意双等号==
表示相等性检查,而单等号a = b
表示赋值。 - 检查两个值不相等。不相等在数学中的符号是
≠
,但在 JavaScript 中写成a != b
。(注意是英文输入法下的符号) - 严格等于
a===b
判断两个值的类型和值是否都相等,严格等于也可以叫恒等于。
var x;
x = 5 > 3;//x=true 5显然大于3
var y;
y = 5 < "3"; //y=false 这里的字符串“3”默认转换为数字3
var z;
z = 5 == "5";//z=true
var m;
m = 5 === "5";//m=false 这里三个等号表示严格等于,严格等于不会类型转换
字符串比较
除了数字比较,字符串之间也有比较。在比较字符串的大小时,JavaScript 会使用“字典(dictionary)”或“词典(lexicographical)”顺序进行判定。换言之,字符串是按字符(母)逐个进行比较的。比如下面:
console.log( 'Z' > 'A' ); // true
console.log( "Bee" > "B" ); // true
字符串的比较算法非常简单:首先比较两个字符串的首位字符大小;如果一方字符较大(或较小),则该字符串大于(或小于)另一个字符串,算法结束;否则,如果两个字符串的首位字符相等,则继续取出两个字符串各自的后一位字符进行比较;重复上述步骤进行比较,直到比较完成某字符串的所有字符为止;如果两个字符串的字符同时用完,那么则判定它们相等,否则未结束(还有未比较的字符)的字符串更大。
布尔值比较
布尔类型值的转换与比较,在与布尔类型作比较时,即与true和false的比较,true会默认转换为1,false默认转换0。比如下面的比较:
console.log( true == 1 );//true 因为true默认转为1
console.log( false == 0 );//true false转为0
console.log( true === 1 );//false 严格等于错误
null undefined 0 false NaN
null undefined 0 false是四个比较特殊的值,比较如下:
console.log( null == undefined );//true
console.log( null === undefined );//false
console.log( false == 0 );//true
console.log( null == 0 );//false
console.log( undefined == 0 );//false
console.log( null == false );//false
console.log( undefined == false );//false
其中undefined
最为特殊,undefined
不应该被与其他值进行比较:
console.log( undefined > 0 ); // false
console.log( undefined < 0 ); // false
console.log( undefined == 0 ); // false
undefined不与任何值相等是因为在大小比较时转换为一个更特殊的值NaN
(Not a Number),也叫非数,非数与任何值都不相等包括它自己。但它比较相等时会和null相等,却不会和false相等。
console.log( undefined == 0 ); // false
console.log( undefined == false ); // false
console.log( undefined == NaN ); // false
console.log( NaN == NaN );//false NaN不与任何值相等,包括自己
除了严格相等
===
外,其他但凡是有undefined/null
参与的比较,我们都需要格外小心。除非你非常清楚自己在做什么,否则永远不要使用>= > < <=
去比较一个可能为null/undefined
的变量。对于取值可能是null/undefined
的变量,请按需要分别检查它的取值情况。