关于平等:JavaScript ==什么时候比===更有意义?

When would JavaScript == make more sense than ===?

正如在JavaScript比较中应该使用哪个equals运算符(=vs==)?表示它们基本相同,除了"EDOCX1"(0)还确保类型相等,因此"EDOCX1"(1)可能执行类型转换。在DouglasCrockford的javascript:好的部分中,建议始终避免"=="。然而,我想知道设计两个相等运算符集的最初想法是什么。

你有没有见过使用"EDOCX1"(1)实际上比使用"EDOCX1"(0)更合适的情况?


考虑比较数字或字符串时的情况:

1
2
3
4
if (4 === 4)
{
  // true
}

但是

1
2
3
4
if (4 =="4")
{
  // true
}

1
2
3
4
if (4 ==="4")
{
  // false
}

这适用于对象和数组。

因此,在上面的情况下,您必须做出明智的选择,是否使用==或===


简单的答案是,当您希望在比较过程中发生类型强制时,"=="比"=="更有意义。

一个很好的例子是在URL查询字符串中传递数字。例如,如果您有分页内容,并且page查询参数保存当前页码,那么您可以使用if (page == 1) ...检查当前页面,即使page实际上是"1",而不是1


我建议使用==没有问题,但要理解何时和为什么使用它(即使用===作为规则,使用==作为目的)。本质上,==只是给你一个简略的符号,而不是做类似的事情

1
if (vble === 0 || vble ==="" || vble === null || vble === undefined || vble === false) ...

写起来容易多了

1
if (vble == false) ...

(或者更容易写)

如果(!)VBLE)

当然,除了寻找"真实"或"虚假"的价值观,还有更多的例子。

实际上,你只需要了解何时以及为什么使用=====,我看不出为什么不在更适合的地方使用==……

另一个示例是使用此速记来允许速记方法调用:

1
2
3
4
5
6
7
8
function func(boolOptionNotCommonlyUsed) {
  if (boolOptionNotCommonlyUsed) { //equiv to boolOptionNotCommonlyUsed == true
    //do something we rarely do
  }
  //do whatever func usually does
}

func(); //we rarely use boolOptionNotCommonlyUsed, so allow calling without"false" as an arg

==比较两个边的值是否相同。

===比较两边的值和数据类型是否相同。

说我们有

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$var = 0;

if($var == false){
  // true because 0 is also read as false
}

if(!$var){
  // true because 0 is also read as false
}

if($var === false){
  // false because 0 is not the same datatype as false. (int vs bool)
}

if($var !== false){
  // true becuase 0 is not the same datatype as false. (int vs bool)
}

if($var === 0){
  // true, the value and datatype are the same.
}

您可以查看http://www.jonlee.ca/the-triple-equals-in-php/