2012-08-08 55 views
8

可能重复:
JavaScript === vs == : Does it matter which “equal” operator I use?是否有必要使用===来比较Javascript中的字符串或者==是否足够?

我可以理解为什么===比较数字,布尔值,空字符串,等等的时候是必要的,因为意外的类型转换如

var foo = 1; 
var bar = true; 
// bar == foo => true 
// bar === foo => false 

但一个变量与一个非空字符串文字时可以==曾经介绍一个错误?在这种情况下,使用==而不是===更有效吗?

+0

http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/ – diEcho 2012-08-08 13:15:21

+0

类型相等应该相同或更快:http://stackoverflow.com/a/359509/453277 – 2012-08-08 13:16:17

+0

等号运算符('===')。它检查值是相同的值和相同的类型。记住这一点。 – diEcho 2012-08-08 13:17:00

回答

7

这里已经有很多这方面的问题,所以我只是让一个更好的海报,然后我自己回答。

到这里看看: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, auto type coercion 
1==="1" // false, because they are of a different type 

Difference between == and === in JavaScript

1

那么,我有点自己回答... 5 ==“5”,但5!==“5”,这可能是意想不到的。我会把任何有更深刻见解的人都归功于他。

+0

那就是答案... – DerWaldschrat 2012-08-08 13:14:58

4

这是一个很好的做法总是使用身份符(!=====)并手动执行类型强制仅当需要(例如Boolean(someVar)Number(someVar))。

A fun fiddle

0

“==”在比较完成之前进行类型转换。这就是为什么5 ==“5”是真实的而不是错误的原因。

“===”不是这种转换,所以5 ===“5”不一样,只要类型不一样。

相关问题