在JavaScript中检查字符串之间是否相等的正确方法是什么?
{} == "[object Object]"
例如,因为评估为true。
String().equals()
不是JS中的方法...
在JavaScript中检查字符串之间是否相等的正确方法是什么?
{} == "[object Object]"
例如,因为评估为true。
String().equals()
不是JS中的方法...
Answers:
始终在您完全了解使用==
and===
运算符的区别和含义之前,请使用运算符,===
因为它将使您免于混淆(非显而易见)的错误和WTF。==
由于内部存在类型强制,“常规”运算符可能会产生非常意外的结果,因此===
始终建议使用方法。
为了了解这一点以及Javascript的其他“好与坏”部分,请阅读Douglas Crockford先生及其工作。在Google技术讲座中,他总结了很多很好的信息:http : //www.youtube.com/watch?v=hQVTIJBZook
更新:
凯尔·辛普森(Kyle Simpson)撰写的 “ 您不知道JS”系列非常出色(可在线免费阅读)。该系列文章深入介绍了该语言中经常被误解的部分,并解释了克罗克福德建议您避免的“不良部分”。通过了解它们,您可以正确使用它们并避免陷阱。
在“ 调试与展望 ”一书包括上一节平等,用时使用宽松(这个特定的总结==
)与严格的(===
)运算符:
要将大量细节归结为一些简单的要点,并帮助您知道是使用
==
还是===
在各种情况下使用,这是我的简单规则:
- 如果比较中的任何一个值(又名“边”)可能是
true
或false
值,请避免==
使用===
。- 如果在比较中任一值可以是这些特定值(
0
,""
,或[]
-空数组),避免==
和使用===
。- 在其他所有情况下,您都可以放心使用
==
。它不仅安全,而且在许多情况下都以提高可读性的方式简化了代码。
对于那些不想花时间真正理解Javascript的开发人员,我仍然推荐Crockford的演讲。对于偶尔仅使用Javascript的开发人员来说,这是一个很好的建议。
if (typeof foo == "string")
===
运算符而不用担心“我真的是完全可以完全==
按照我的想法行事吗?100%更好”。
++
/ --
)。
++
或--
或单行if/else
陈述或continue
或new
经营者或其他任何数量的完全合法的代码实践,克罗克福德已被视为“有害”。当然,甚至永远也不要考虑使用它,eval
或者with
即使他们的陷阱很容易理解。您看过下一版JS吗?这段时间里,我们得到的几乎是更严格的语法和少数辅助功能,其中一些已经浮动了很多年。语法根本没有发展。如果克罗克福德(Crockford)支持,那将是一件坏事。
如果您知道它们是字符串,则无需检查类型。
"a" == "b"
但是,请注意,字符串对象将不相等。
new String("a") == new String("a")
将返回false。
调用valueOf()方法将其转换为String对象的基元,
new String("a").valueOf() == new String("a").valueOf()
将返回true
new String("a") == "a"
为true(但不会与在一起===
),因为左侧将被转换为原始字符串值。
new String("a") == new String("a")
将全部回报,因为你和引用处理的对象类,类型不是基本类型。new String("a") === new String("b")
new String("a") === new String("a")
false
String
string
new String(foo)
创建一个字符串对象,String(foo)
并将 foo 转换为字符串基元。
答案的唯一补充:如果所有这些方法都返回false,那么即使字符串看起来相等,一个字符串的左侧和/或右侧也可能存在空格。因此,.trim()
在比较之前,只需将a 放在字符串的末尾:
if(s1.trim() === s2.trim())
{
// your code
}
我已经花了很多时间试图找出问题所在。希望这对某人有帮助!
fetch
)。非常感谢。
导致我提出这个问题的是padding
和white-spaces
检查我的情况
if (title === "LastName")
doSomething();
标题是 " LastName"
所以也许你必须使用这样的
trim
功能
var title = $(this).text().trim();
.toString().trim()
在打字稿中使用的相同 内容
除非您真的知道强制是如何工作的,否则应避免==
使用标识运算符,===
而应使用它。但是您应该阅读此书以了解其工作原理。
如果使用==
,则可以让语言为您执行某种类型的强制转换,例如:
"1" == 1 // true
"0" == false // true
[] == false // true
正如道格拉斯·克罗克福德(Douglas Crockford)在他的书中所说:
始终最好使用身份运算符。
{}==" "
给我Unexpected token ==
什么是正确的方法?
实际上,可以使用两种方法在javascript中创建字符串。
var str = 'Javascript';
这将创建一个原始字符串值。
var obj = new String('Javascript');
这将创建类型的包装对象String
。
typeof str // string
typeof obj // object
因此,检查相等性的最佳方法是使用===
运算符,因为它会同时检查值和两个操作数的类型。
如果要检查两个对象之间的相等性,则使用String.prototype.valueOf
是正确的方法。
new String('javascript').valueOf() == new String('javascript').valueOf()
我在测试期间想出了一个替代解决方案。您可以在字符串原型上使用function。
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浏览器中正常工作
==
。