2014-10-29 68 views
3

我不知道什么是更好的使用:什么是更好的使用:“2”.toString()=== 2.toString()或“2”== 2?

var s = "2"; 
var i = 2; 
if(s.toString() === i.toString()){ 
    //do something 
} 
//OR 

if(s == i){ 
    //do something 
} 

感谢您的帮助

+1

我会用第一种方法,因为它确实是我们想要的。 – 2014-10-29 07:24:07

+0

你的目标是什么? – 2014-10-29 07:24:15

+0

我同意@Mr_Green,第一种方法更清晰,JavaScript也有一些奇怪的强制规则。 – simonzack 2014-10-29 07:24:32

回答

4

你实际上是比较两个不同的东西,第一,你是铸造这两个变量值的字符串和比较,而另一个比较失败,即你实际上没有检查这些变量的数据类型。所以如果您将stringint的值相比较,它将返回true。

根据我的说法,你应该使用的是===,它不仅会比较数值,还会比较它们的数据类型,因为你使用的数据都被视为丢失。

如果您根本不考虑数据类型,那么使用==就足够了。您不必将值转换为string

1

在你的第一个例子,如果您有任何理由获得2的空间,它会评估假(甚至==):

var s = " 2"; // 2 with a sneaky space 
var i = 2; 
if(s.toString() === i.toString()){ // will be false 
    //do something 
} 

个人而言,我更喜欢使用===,但我会改变值为整数,而不是字符串。

var s = " 2"; // 2 with a sneaky space again 
var i = 2; 
if(Number(s) === Number(i)){ // will be true 
    //do something 
} 

你不需要第二个Number(),但是我不知道,你可能会得到也是字符串的数据。