在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")falseStringstring
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浏览器中正常工作
==。