JavaScript 中 == 和 === 的区别

IT技术 javascript comparison-operators equality-operator identity-operator
2021-01-12 20:50:51

JavaScript 中==之间有什么区别===我也见过!=!==运营商。还有更多这样的运营商吗?

2个回答

看看这里:http : //longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html

3 个等号表示“没有类型强制的平等”。使用三重等号时,值的类型也必须相等。

0 == false   // true
0 === false  // false, because they are of a different type
1 == "1"     // true, automatic type conversion for value only
1 === "1"    // false, because they are of a different type
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
感谢您的明确答复!我想如果与 C# 相比,== 也将是 == 并且 === 将转换为 .Equals()
2021-03-10 20:50:51
@hrishikeshp19:在那种情况下,值实际上是不同的(不同的对象引用)
2021-03-12 20:50:51
@KoenZomers 我认为您的 C# 案例不正确。实际上,C# 中没有等价物。== 在 C# 中进行引用比较,而 Equals 进行预定义比较,它们在 JavaScript 中也没有等价物。
2021-03-22 20:50:51
@hrishikeshp19new String()不是字符串类型,而是对象类型,因此适用对象的 === 规则。然而,使用原始字符串通常会导致将字符串强制转换为String对象,因此差异很微妙。如果您要分配new String()给两个不同的对象s1and s2,则valueOf()每个对象上方法都会为每个对象返回一个字符串原语,并且s1.valueOf() === s2.valueOf()会返回true.
2021-03-25 20:50:51
“new String()===new String()”怎么样,值和类型都是一样的。但是语句返回false。
2021-04-05 20:50:51

===!==是严格的比较运算符:

JavaScript 有严格的和类型转换的相等比较。为了strict相等,被比较的对象必须具有相同的类型,并且:

  • 当两个字符串具有相同的字符序列、相同的长度并且在相应位置具有相同的字符时,它们是严格相等的。
  • 当两个数字在数值上相等(具有相同的数值)时,它们是严格相等的。NaN不等于任何东西,包括NaN. 正零和负零彼此相等。
  • 如果两个布尔操作数都为真或都为假,则两个布尔操作数严格相等。
  • 如果两个对象引用相同的 ,则它们严格相等Object
  • NullUndefined类型是==(但不是===)。[即 ( Null==Undefined) 是true但 ( Null===Undefined) 是false]

比较运算符 - MDC

我没有完全明白“如果两个对象引用同一个对象,则它们严格相等” - 什么?通过两个对象,是否意味着两个引用变量..?
2021-03-21 20:50:51
因此,如果我这样做,例如:if (input == null) ...,当输入未定义时,它是否也会使条件为真?
2021-03-23 20:50:51
-1 问题是“有什么区别?” 你只解释了严格运算符,但没有解释它们与非严格运算符的区别
2021-03-27 20:50:51
以上听起来好像 == 比较不会检查第一个项目符号中的所有内容,“相同的字符序列,相同的长度和相应位置的相同字符”,但实际上确实如此。据我所知,比较两个字符串时唯一真正的区别是使用 ===new String()===new String()返回 false(不同的对象引用)。new String无论如何都应该避免。
2021-03-30 20:50:51
有关问题的简单英文描述,请参阅stackoverflow.com/a/38856418/984780
2021-04-04 20:50:51