现代JS学习笔记:JS中各种变量值之间的比较方式

Posted by Mars . Modified at

学习内容:《现代JavaScript教程》

JS中各种变量值的比较方式

数学比较

包括>、<、>=、<=、==、!=等。

数字比较返回值为Boolean类型。

字符串比较

在比较字符串的大小时,JavaScript 会使用“字典(dictionary)”或“词典(lexicographical)”顺序进行判定(实际是 Unicode 编码顺序)。换言之,字符串是按字符(母)逐个进行比较的。

!注意:

即使两个字符串都看起来像是数字,也遵循字符串的字典比较原则。

‘2’>’1999’ //true,因为首字符2的Unicode编码大于1

!字符串的比较算法:

  1. 首先比较两个字符串的首位字符大小。(非真正的字典顺序,而是 Unicode 编码顺序)
  2. 如果一方字符较大(或较小),则该字符串大于(或小于)另一个字符串。算法结束。
  3. 否则,如果两个字符串的首位字符相等,则继续取出两个字符串各自的后一位字符进行比较。
  4. 重复上述步骤进行比较,直到比较完成某字符串的所有字符为止。
  5. 如果两个字符串的字符同时用完,那么则判定它们相等,否则未结束(还有未比较的字符)的字符串更大。

!其他语言字符串的比较:

所有现代浏览器(IE10- 需要额外的库 Intl.JS) 都支持国际化标准 ECMA-402。

它提供了一种特殊的方法来比较不同语言的字符串,遵循它们的规则。

调用 str.localeCompare(str2) 会根据语言规则返回一个整数,这个整数能表明 str 是否在 str2 前,后或者等于它:

  1. 如果 str 小于 str2 则返回负数。
  2. 如果 str 大于 str2 则返回正数。
  3. 如果它们相等则返回 0。

不同原始类型之间的比较

首先转换为数字类型,然后再比较大小。

对于布尔类型值,true 会被转化为 1、false 转化为 0。

严格比较

严格相等比较时,不进行任何类型转换。二者必须完全一致才返回True.

=== 严格相等

!== 严格不相等

★ null、NaN 与 undefined 参与的比较 ★

  • NaN与任何值进行比较都返回false;
  • null === undefined // false,二者属于不同的类型;
  • null == undefined //true;

这是JavaScript强制规定。null只与undefined相等 ,各自不与任何其他变量值相等;

  • 当使用数学式或其他比较方法 < > <= >= 时:

    null/undefined 会被转化为数字:null 被转化为 0,

    undefined 被转化为 NaN。(NaN与任何值进行比较都会返回false。所以尽量永远不让undefined参与比较。)

!注意:

① 除了严格相等 === 外,其他但凡是有 undefined/null 参与的比较,我们都需要格外小心。

② 除非你非常清楚自己在做什么,否则永远不要使用 >=、>、<、<=去比较一个可能为 null/undefined 的变量。对于取值可能是 null/undefined 的变量,请按需要分别检查它的取值情况。

Keywords: JavaScript
previousPost nextPost
已经有 1000000 个小伙伴看完了这篇推文。