在 JavaScript 中检查字符串之间是否相等的正确方法是什么?
在 JavaScript 中检查字符串相等性的正确方法是什么?
始终在您完全理解使用==
and===
运算符的区别和含义之前,请使用运算符,===
因为它将使您免于晦涩(非显而易见)的错误和 WTF。==
由于内部的类型强制,“常规”运算符可能会产生非常意外的结果,因此===
始终推荐使用。
要深入了解这一点,以及 Javascript 的其他“好与坏”部分,请阅读 Douglas Crockford 先生和他的作品。有一个很棒的谷歌技术演讲,他总结了很多很好的信息:http : //www.youtube.com/watch?v=hQVTIJBZook
更新:
凯尔·辛普森 (Kyle Simpson) 的“你不知道的 JS”系列非常棒(可免费在线阅读)。该系列深入探讨了语言中普遍被误解的领域,并解释了 Crockford 建议您避免的“坏部分”。通过了解它们,您可以正确使用它们并避免陷阱。
“ Up & Going ”一书包含一个关于Equality的部分,其中包含了何时使用松散 ( ==
) 与严格 ( ===
) 运算符的具体摘要:
为了将大量细节归结为几个简单的要点,并帮助您了解是否使用
==
或===
在各种情况下使用,以下是我的简单规则:
- 如果比较中的任何一个值(也称为边)可能是
true
或false
值,请避免==
并使用===
。- 如果在比较中任一值可以是这些特定值(
0
,""
,或[]
-空数组),避免==
和使用===
。- 在所有其他情况下,您可以安全地使用
==
. 它不仅安全,而且在许多情况下,它以提高可读性的方式简化了您的代码。
对于不想花时间真正理解 Javascript 的开发人员,我仍然推荐 Crockford 的演讲——对于偶尔使用 Javascript 的开发人员来说,这是一个很好的建议。
如果您知道它们是字符串,则无需检查类型。
"a" == "b"
但是,请注意字符串对象将不相等。
new String("a") == new String("a")
将返回假。
调用 valueOf() 方法将其转换为 String 对象的原语,
new String("a").valueOf() == new String("a").valueOf()
会返回真
对答案的补充:如果所有这些方法都返回 false,即使字符串看起来相等,也可能在一个字符串的左侧或右侧有一个空格。因此,.trim()
在比较之前只需在字符串的末尾放置一个:
if(s1.trim() === s2.trim())
{
// your code
}
我花了几个小时试图弄清楚出了什么问题。希望这会对某人有所帮助!