在 JavaScript 中检查字符串是否相等的正确方法是什么?
9 回答
在您完全理解使用==
and===
运算符===
因为它将使您免于晦涩(非显而易见)的错误和 WTF。==
由于内部的类型强制,“常规”===
始终推荐使用这种方法。
为了深入了解这一点,以及 Javascript 的其他“好与坏”部分,请阅读 Douglas Crockford 先生和他的工作。有一个很棒的谷歌技术讲座,他总结了很多很好的信息:http ://www.youtube.com/watch?v=hQVTIJBZook
更新:
Kyle Simpson的You Don't Know JS系列非常棒(并且可以免费在线阅读)。该系列进入了该语言中通常被误解的领域,并解释了 Crockford 建议您避免的“坏部分”。通过了解它们,您可以正确使用它们并避免陷阱。
“ Up & Going ”一书包括一个关于Equality的部分,其中具体总结了何时使用松散 ( ==
) 与严格 ( ===
) 运算符:
要将大量细节归结为一些简单的要点,并帮助您了解是否使用
==
或===
在各种情况下使用,以下是我的简单规则:
- 如果比较中的任一值(也称为边)可能是
true
orfalse
值,请避免==
使用===
.- 如果比较中的任一值可能是这些特定值(
0
、""
或[]
-- 空数组),请避免==
并使用===
.- 在所有其他情况下,您可以安全使用
==
. 它不仅安全,而且在许多情况下,它以提高可读性的方式简化了您的代码。
对于不想花时间真正理解 Javascript 的开发人员,我仍然推荐 Crockford 的演讲——对于偶尔使用 Javascript 的开发人员来说,这是一个很好的建议。
如果您知道它们是字符串,则无需检查类型。
"a" == "b"
但是,请注意字符串对象不会相等。
new String("a") == new String("a")
将返回假。
调用 valueOf() 方法将其转换为 String 对象的原语,
new String("a").valueOf() == new String("a").valueOf()
将返回真
只是对答案的一个补充:如果所有这些方法都返回 false,即使字符串看起来相等,也可能在一个字符串的左侧和或右侧有一个空格。因此,只需.trim()
在比较之前将 a 放在字符串的末尾:
if(s1.trim() === s2.trim())
{
// your code
}
我已经浪费了几个小时试图找出问题所在。希望这对某人有帮助!
There are actually two ways in which strings can be made in javascript.
var str = 'Javascript';
This creates a primitive string value.var obj = new String('Javascript');
This creates a wrapper object of typeString
.typeof str // string
typeof obj // object
So the best way to check for equality is using the ===
operator because it checks value as well as type of both operands.
If you want to check for equality between two objects then using String.prototype.valueOf
is the correct way.
new String('javascript').valueOf() == new String('javascript').valueOf()
Objects
可以使用JSON.stringify()
技巧检查字符串。
var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);
严格比较
要进行简单比较,请使用===
来检查严格相等。正如其他人所说,这具有最高效和减少错误或不确定代码的机会的优点。来源:MDN 网络文档:严格平等。
var a = "hello1";
var b = "hello2";
console.log("a === a?" + (a === a) + "|");
console.log("a === b?" + (a === b) + "|");
字母比较
如果要比较两个字符串以了解一个字符串是在另一个字符串之前还是之后,基于自然排序,请使用<
、>
、<=
和>=
运算符。来源: MDN WebDocs for <
、>
、<=
和>=
。
var a = "hello1";
var b = "hello2";
console.log("a < a?" + (a < a) + "|");
console.log("a < b?" + (a < b) + "|");
console.log("a > b?" + (a > b) + "|");
console.log("b > a?" + (b > a) + "|");
考虑到两个字符串都可能非常大,有两种主要方法bitwise search
和localeCompare
我推荐了这个功能
function compareLargeStrings(a,b){
if (a.length !== b.length) {
return false;
}
return a.localeCompare(b) === 0;
}