med*_*iev 195

因为等于运算符==强制转换,或临时转换数据类型以查看它是否等于另一个操作数,而===(身份运算符)不需要进行任何转换,从而减少了工作量,使其更快.

  • 那怎么相反呢? (92认同)
  • http://www.phpbench.com/表示"控制结构"部分下的==和===之间的性能差异. (4认同)
  • 我相信它实际上是2个操作数指向复杂类型的相同内存区域,但是meder的答案包含了 (2认同)

rav*_*ren 54

===不执行类型转换,所以0 == '0'评估true,但是0 === '0'- false.


ibl*_*ish 25

首先,===检查两个参数是否是相同的类型 - 因此在进行任何比较之前,数字1和字符串"1"在类型检查上失败.另一方面,==不会先检查类型并继续将两个参数转换为相同的类型然后进行比较.

因此,===更快地检查失败条件

  • 我猜想`==`还会先检查类型,看是否需要进行任何类型转换.`===`在以下步骤中不进行任何转换的事实使得它更快. (8认同)

Sal*_*n A 22

有两件事需要考虑:

  1. 如果操作数类型是不同的,那么=====产生不同的结果.在这种情况下,操作员的速度无关紧要; 重要的是哪一个产生了预期的结果.

  2. 如果操作数类型是相同的,那么你可以使用=====作为两者都将产生相同的结果.在这种情况下,两个运营商的速度几乎相同.这是因为任何一个运营商都没有进行类型转换.

我比较了速度:

  • $a == $b VS $a === $b
  • 哪里$a$b是随机整数[1,100]
  • 生成两个变量并进行一百万次比较
  • 测试进行了10次

以下是结果:

 $a == $b $a === $b
--------- ---------
 0.765770  0.762020
 0.753041  0.825965
 0.770631  0.783696
 0.787824  0.781129
 0.757506  0.796142
 0.773537  0.796734
 0.768171  0.767894
 0.747850  0.777244
 0.836462  0.826406
 0.759361  0.773971
--------- ---------
 0.772015  0.789120
Run Code Online (Sandbox Code Playgroud)

你可以看到速度几乎相同.

  • 我想知道如果你在没有做任何其他事情的机器上做了几十亿次迭代会发生什么,只输出平均值.看起来这里有很多噪音.;) (13认同)
  • 我得出了相同的结论:如果已知操作数来自同一类型,则不会有任何区别.其他情况不会发生.几乎所有其他答案都是错误的. (3认同)

Chr*_*ris 7

我真的不知道它是否明显更快,但在大多数语言中===是直接类型比较,而==将尝试进行类型强制,如果必要/可能获得匹配.

  • Javascript有===运算符. (9认同)

Mar*_*tin 5

== 在比较之前会产生较大的类型转换开销。=== 首先检查类型,然后继续进行,无需进行任何类型转换。