freeCodeCamp/guide/chinese/javascript/comparison-operators/index.md

6.0 KiB
Raw Blame History

title localeTitle
Comparison Operators 比较运算符

JavaScript具有严格类型转换比较。

  • 严格比较(例如===)仅在操作数类型相同时才为真。

  • 更常用的抽象比较(例如==在进行比较之前将操作数转换为相同的Type。

  • 对于关系抽象比较(例如,<=),操作数首先在比较之前转换为基元,然后转换为相同类型。

  • 使用Unicode值基于标准词典排序比较字符串。

比较特点:

  • 当两个字符串在相应位置具有相同的字符序列,相同的长度和相同的字符时,它们严格相等。

  • 当两个数字在数值上相等(具有相同的数值)时,两个数字严格相等。 NaN不等于任何东西包括NaN。正负零彼此相等。

  • 如果两个布尔操作数都为真或两者都为假,则它们严格相等。

  • 对于严格或抽象的比较,两个不同的对象永远不会相等。

  • 仅当操作数引用相同的Object时才会使用比较Objects的表达式。

  • 空和未定义类型严格等于它们自己并且抽象地彼此相等。

平等运营商

平等(==

如果操作数不是同一类型 ,则等于运算符会转换操作数,然后应用严格比较。如果两个操作数都是对象 则JavaScript比较内部引用当操作数引用内存中的同一对象时这些内部引用相等。

句法

 x == y 

例子

 1   ==  1        // true 
 "1"  ==  1        // true 
 1   == '1'       // true 
 0   == false     // true 
 0   == null      // false 
 
   0   == undefined   // false 
 null  == undefined   // true 

不平等(!=

如果操作数不相等则不等运算符返回true。如果两个操作数的类型不同 则JavaScript会尝试将操作数转换为适当的类型以进行比较。如果两个操作数都是对象 则JavaScript比较内部引用当操作数引用内存中的不同对象时这些引用不相等。

句法

x != y 

例子

1 !=   2     // true 
 1 !=  "1"    // false 
 1 !=  '1'    // false 
 1 !=  true   // false 
 0 !=  false  // false 

身份/严格平等(===

如果操作数严格相等**而没有类型转换,**则identity运算符返回true。

句法

x === y 

例子

3 === 3   // true 
 3 === '3' // false 

非身份/严格不平等(!==

如果操作数不相等和/或不是相同类型,则非标识运算符返回true。

句法

x !== y 

例子

3 !== '3' // true 
 4 !== 3   // true 

关系运算符

大于运算符(>

如果左操作数大于右操作数则大于运算符返回true。

句法

x > y 

例子

4 > 3 // true 

运算符大于等于(> =

如果左操作数大于或等于右操作数则大于或等于运算符返回true。

句法

x >= y 

例子

4 >= 3 // true 
 3 >= 3 // true 

小于运算符(<

如果左操作数小于右操作数则小于运算符返回true。

句法

x < y 

例子

3 < 4 // true 

小于等于运算符(<=

如果左操作数小于或等于右操作数则小于或等于运算符返回true。

句法

x <= y 

例子

3 <= 4 // true 

您可以在MDN上找到更多信息。

比较null和undefined

当我们比较null和undefined时我们会看到不同的行为。让我们通过示例检查不同的场景

示例 - 严格相等检查(===

console.lognull === undefined; // O / P - 假

Otuput是假的这是正确的因为我们知道“null”和“undefined”是不同的类型。

示例 - 非严格相等性检查(==

console.lognull == undefined; // O / P - 是的

怎么样这是因为“null”和“undefined”有一个特殊规则。由于它们在非严格检查==)的情况下是相同的,但不等于任何其他值。

如果我们使用比较运算符,如<><=> =等则“null”和“undefined”将转换为数字在这种情况下“null”将变为0“undefined”将为NaN。让我们检查一下这些例子。

示例 - 将null与0进行比较

console.lognull> 0; // O / P - 假 console.lognull> = 0; // O / P - 是的 console.lognull == 0; // O / P - 假

奇怪根据第一个语句null不大于0并且从第二个语句中null大于或等于0.因此如果我们以数学方式思考并比较两个语句则会得到null等于0的结果。 ,按照第三种说法,这不是真的。为什么?

原因是“比较”和“平等检查”都以不同的方式起作用。 相比之下“null / undefined”首先转换为数字因此在前两种情况下“null”变为0因此case1null> 0 - > false和case2null> = 0 - > true。 但是,在等式检查(==“null / undefined”在没有任何转换的情况下工作并且如上所述特殊规则在等式检查中“null / undefined”仅相互等于并且不等于其他任何内容。因此null == 0 - > false。

示例 - 将undefined与0进行比较

console.logundefined> 0; // O / P - 假 console.logundefined> = 0; // O / P - 假 console.logundefined == 0; // O / P - 假

在这里我们测试与null相同的情况但结果又不同。为什么

原因如下。 在前两种情况下我们将undefined与0进行比较并且如上所述比较undefined会转换为NaN。 NaN是一个特殊值与任何数字相比总是返回false这就是我们在前两种情况下输出为false的原因。 对于第三个陈述原因与“null”中提到的相同。在等式检查中“null / undefined”仅相互等于并且不等于其他任何内容。因此undefined == 0 - > false。