在JavaScript中检查字符串之间的相等性的正确方法是什么?
只是答案的一个补充:如果所有这些方法都返回false,即使字符串看起来相等,也可能在一个字符串的左侧或右侧有一个空格 . 所以,在比较之前,只需将 .trim() 放在字符串的末尾:
.trim()
if(s1.trim() === s2.trim()) { // your code }
我花了很多时间试图找出问题所在 . 希望这会对某人有所帮助!
实际上有两种方法可以在javascript中创建字符串 .
var str = 'Javascript'; 这会创建一个原始字符串值 .
var str = 'Javascript';
var obj = new String('Javascript'); 这将创建 String 类型的包装器对象 .
var obj = new String('Javascript');
String
typeof str // stringtypeof obj // object
typeof str // string
typeof obj // object
因此,检查相等性的最佳方法是使用 === 运算符,因为它检查值和两个操作数的类型 .
===
如果要检查两个对象之间是否相等,则使用 String.prototype.valueOf 是正确的方法 .
String.prototype.valueOf
new String('javascript').valueOf() == new String('javascript').valueOf()
我在测试期间想出了另一种解决方案 . 你可以在字符串原型上使用函数 .
String.prototype.betwenStr = function(one){ return JSON.stringify(new String(this)) === JSON.stringify(new String(one)); } //call it "hello world".betweenStr("hello world"); //returns boolean //value
适用于Chrome浏览器
始终在您完全理解使用 == 和 === 运算符的差异和含义之前,请使用 === 运算符,因为它将使您免于模糊(非明显)错误和WTF . 由于内部的类型强制,"regular" == 运算符可能会产生非常意外的结果,因此始终建议使用 === .
==
为了深入了解这一点,以及Javascript的其他部分阅读Douglas Crockford先生和他的工作 . 有一个很棒的Google Tech Talk,他总结了很多好消息:http://www.youtube.com/watch?v=hQVTIJBZook
Update:
Kyle Simpson撰写的You Don't Know JS系列非常出色(可以免费在线阅读) . 该系列进入了该语言常被误解的领域,并解释了克罗克福德建议你避免的"bad parts" . 通过了解它们,您可以正确使用它们并避免陷阱 .
“Up & Going”一书包含Equality的一节,其中详细介绍了何时使用松散( == )vs严格( === )运算符:
将一大堆细节归结为几个简单的小贴士,并帮助您了解是否在各种情况下使用==或===,这是我的简单规则:如果比较中的任何一个值(也称为边)可能是真值或假值,避免==并使用=== . 如果比较中的任何一个值可以是这些特定值(0,“”或[] - 空数组),则避免==并使用=== . 在所有其他情况下,您可以安全地使用== . 它不仅安全,而且在许多情况下,它以提高可读性的方式简化了代码 .
对于那些不想花时间真正理解Javascript的开发人员,我仍然推荐Crockford的演讲 - 这对于偶尔在Javascript中工作的开发人员来说是个好建议 .
可以使用此hack JSON.stringyfy() 检查字符串 Objects
JSON.stringyfy()
Objects
var me = new String("me"); var you = new String("me"); var isEquel = JSON.stringify(me) === JSON.stringify(you); console.log(isEquel);
让我想到这个问题的是 padding 和 white-spaces
padding
white-spaces
检查我的情况
if (title === "LastName") doSomething();
和 Headers 是 " LastName"
" LastName"
所以也许你必须使用像这样的修剪功能
var title = $(this).text().trim();
如果您知道它们是字符串,那么就不需要检查类型 .
"a" == "b"
但是,请注意字符串对象不相等 .
new String("a") == new String("a")
将返回false .
调用valueOf()方法将其转换为String对象的原语,
new String("a").valueOf() == new String("a").valueOf()
将返回true
Unless you really know how coercion works, you should avoid == and use the identity operator === instead. 但你应该read this to understand how it works .
如果你使用 == ,你可以让语言为你做一些类型强制,例如:
"1" == 1 // true "0" == false // true [] == false // true
道格拉斯·克罗克福德在他的书中说:
总是更好地使用身份运算符 .
8 回答
只是答案的一个补充:如果所有这些方法都返回false,即使字符串看起来相等,也可能在一个字符串的左侧或右侧有一个空格 . 所以,在比较之前,只需将
.trim()
放在字符串的末尾:我花了很多时间试图找出问题所在 . 希望这会对某人有所帮助!
实际上有两种方法可以在javascript中创建字符串 .
var str = 'Javascript';
这会创建一个原始字符串值 .var obj = new String('Javascript');
这将创建String
类型的包装器对象 .typeof str // string
typeof obj // object
因此,检查相等性的最佳方法是使用
===
运算符,因为它检查值和两个操作数的类型 .如果要检查两个对象之间是否相等,则使用
String.prototype.valueOf
是正确的方法 .我在测试期间想出了另一种解决方案 . 你可以在字符串原型上使用函数 .
适用于Chrome浏览器
始终在您完全理解使用
==
和===
运算符的差异和含义之前,请使用===
运算符,因为它将使您免于模糊(非明显)错误和WTF . 由于内部的类型强制,"regular"==
运算符可能会产生非常意外的结果,因此始终建议使用===
.为了深入了解这一点,以及Javascript的其他部分阅读Douglas Crockford先生和他的工作 . 有一个很棒的Google Tech Talk,他总结了很多好消息:http://www.youtube.com/watch?v=hQVTIJBZook
Update:
Kyle Simpson撰写的You Don't Know JS系列非常出色(可以免费在线阅读) . 该系列进入了该语言常被误解的领域,并解释了克罗克福德建议你避免的"bad parts" . 通过了解它们,您可以正确使用它们并避免陷阱 .
“Up & Going”一书包含Equality的一节,其中详细介绍了何时使用松散(
==
)vs严格(===
)运算符:对于那些不想花时间真正理解Javascript的开发人员,我仍然推荐Crockford的演讲 - 这对于偶尔在Javascript中工作的开发人员来说是个好建议 .
可以使用此hack
JSON.stringyfy()
检查字符串Objects
让我想到这个问题的是
padding
和white-spaces
检查我的情况
和 Headers 是
" LastName"
如果您知道它们是字符串,那么就不需要检查类型 .
但是,请注意字符串对象不相等 .
将返回false .
调用valueOf()方法将其转换为String对象的原语,
将返回true
Unless you really know how coercion works, you should avoid == and use the identity operator === instead. 但你应该read this to understand how it works .
如果你使用
==
,你可以让语言为你做一些类型强制,例如:道格拉斯·克罗克福德在他的书中说: