飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

JavaScript比较运算符

时间:2021-11-24  作者:匿名  

JavaScript比较

我们从数学中知道许多比较运算符。

在 JavaScript 中,它们是这样写的:

大于/小于:a > b, a < b.

大于/小于或等于:a >= b, a <= b.

Equals: a == b,请注意双等号==表示相等测试,单等号表示a = b赋值。

不等于:在数学中,符号是≠,但在 JavaScript 中,它被写为a != b。

在本文中,我们将更多地了解不同类型的比较,JavaScript 如何进行比较,包括重要的特性。

最后,您会找到避免“JavaScript 怪癖”相关问题的好方法。

结果是布尔值

所有比较运算符都返回一个布尔值:

true – 表示“是”、“正确”或“真相”。

false – 表示“不”、“错误”或“不是事实”。

例如:

alert( 2 > 1 );  // true (correct)
alert( 2 == 1 ); // false (wrong)
alert( 2 != 1 ); // true (correct)

一个比较结果可以赋值给一个变量,就像任何值一样:

let result = 5 > 4; // assign the result of the comparison
alert( result ); // true

字符串比较

为了查看一个字符串是否大于另一个字符串,JavaScript 使用所谓的“字典”或“词典”顺序。

换句话说,字符串是一个字母一个字母的比较。

例如:

alert( 'Z' > 'A' ); // true
alert( 'Glow' > 'Glee' ); // true
alert( 'Bee' > 'Be' ); // true

比较两个字符串的算法很简单:

1、比较两个字符串的第一个字符。

2、如果第一个字符串中的第一个字符大于(或小于)另一个字符串,则第一个字符串大于(或小于)第二个。我们完成了。

3、否则,如果两个字符串的第一个字符相同,则以相同的方式比较第二个字符。

4、重复直到任一字符串的结尾。

5、如果两个字符串以相同的长度结束,则它们相等。否则,更长的字符串更大。

在上面的第一个示例中,比较'Z' > 'A'在第一步得到结果。

所述第二比较'Glow'和'Glee'需要更多的步骤作为字符串进行比较的字符逐字符:

G与 相同G。

l与 相同l。

o大于e。停在这里。第一个字符串更大。

这里说的字典不是真正的字典,而是 Unicode 顺序

上面给出的比较算法大致相当于字典或电话簿中使用的比较算法,但并不完全相同。

例如,下面很重要。大写字母"A"不等于小写字母"a"。哪个更大?小写"a"。为什么?因为小写字符在 JavaScript 使用的内部编码表 (Unicode) 中具有更大的索引。

不同类型的比较

比较不同类型的值时,JavaScript 会将值转换为数字。

例如:

alert( '2' > 1 ); // true, string '2' becomes a number 2
alert( '01' == 1 ); // true, string '01' becomes a number 1

对于布尔值,true变成1和false变成0。

例如:

alert( true == 1 ); // true
alert( false == 0 ); // true

一个有趣的结果

有可能同时:

两个值相等。

其中一个是true布尔值,另一个是false布尔值。

例如:

let a = 0;
alert( Boolean(a) ); // false
let b = "0";
alert( Boolean(b) ); // true
alert(a == b); // true!

从 JavaScript 的角度来看,这个结果很正常。相等检查使用数字转换(因此"0"变为0)来转换值,而显式Boolean转换使用另一组规则。

严格平等

定期的平等检查==有问题。它不能区分0来自false:

alert( 0 == false ); // true

空字符串也会发生同样的事情:

alert( '' == false ); // true

发生这种情况是因为不同类型的操作数被相等运算符转换为数字==。空字符串,就像 一样false,变成零。

怎么做,如果我们想区分0的false?

严格相等运算符===在没有类型转换的情况下检查相等性。

换句话说,如果a和b是不同的类型,则a === b立即返回false而不尝试转换它们。

让我们试试看:

alert( 0 === false ); // false, because the types are different

还有一个!==类似于的“严格不等式”运算符!=。

严格相等运算符的编写时间要长一些,但它使发生的事情一目了然,并减少了出错的空间。

与 null 和 undefined 的比较

当null或undefined与其他值进行比较时,存在非直观行为。

对于严格的平等检查 ===

这些值是不同的,因为它们中的每一个都是不同的类型。

alert( null === undefined ); // false

对于非严格检查 ==

有一个特殊的规则。这两个是“甜蜜的情侣”:它们彼此相等(在 意义上==),但没有任何其他价值。

alert( null == undefined ); // true

用于数学和其他比较 < > <= >=

null/undefined转换为数字:null变成0,而undefined变成NaN。

现在让我们看看当我们应用这些规则时会发生一些有趣的事情。而且,更重要的是,如何不落入他们的圈套。

奇怪的结果:null vs 0

让我们null与零进行比较:

alert( null > 0 );  // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true

在数学上,这很奇怪。最后一个结果表明“null大于或等于零”,因此在上面的比较之一中它必须是true,但它们都是false。

原因是相等检查==和比较的> < >= <=工作方式不同。比较转换null为数字,将其视为0. 这就是为什么(3)null >= 0为true而(1)null > 0为false的原因。

另一方面,==对undefined和的相等性检查null被定义为,在没有任何转换的情况下,它们彼此相等并且不等于其他任何东西。这就是为什么(2)null == 0是错误的。

无与伦比的未定义

该值undefined不应与其他值进行比较:

alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)

为什么它那么讨厌零?永远是false!

我们得到这些结果是因为:

1、比较(1)和(2)返回false因为undefined被转换为NaN并且NaN是一个特殊的数值,它false为所有比较返回。

2、平等检查(3)的回报false,因为undefined只有等于null,undefined并没有其他价值。

避免问题

我们为什么要讨论这些例子?我们应该一直记住这些特点吗?嗯,不是真的。实际上,这些棘手的事情会随着时间的推移逐渐变得熟悉,但是有一个可靠的方法可以避免它们出现问题:

1、小心对待任何比较,undefined/null除了严格的平等===。

2、不要>= > < <=与可能为 的变量进行比较null/undefined,除非您非常确定自己在做什么。如果变量可以具有这些值,请单独检查它们。

总结概括

比较运算符返回一个布尔值。

字符串按“字典”顺序逐个字母进行比较。

当比较不同类型的值时,它们会被转换为数字(不包括严格的相等检查)。

值null和彼此undefined相等==,不等于任何其他值。

使用像>或<偶尔可能为 的变量时要小心null/undefined。null/undefined单独检查是个好主意。

搜你所爱
JavaScript:目录
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。