在 JavaScript 中检查字符串相等性的正确方法是什么?

在 JavaScript 中检查字符串之间是否相等的正确方法是什么?

答案

总是直到你完全理解的差异和使用的影响=====运营商,使用===运营商,因为它可以使你免于晦涩(非显而易见性)的错误和 WTFs。由于内部存在类型强制,“常规” ==运算符可能会产生非常意外的结果,因此始终建议使用===

为了了解这一点以及 Javascript 的其他 “好与坏” 部分,请阅读 Douglas Crockford 先生及其工作。在 Google 技术讲座中,他总结了很多很好的信息: http : //www.youtube.com/watch?v=hQVTIJBZook


更新:

凯尔 · 辛普森(Kyle Simpson) 撰写的您不知道 JS”系列非常出色(可在线免费阅读)。该系列文章深入介绍了该语言中经常被误解的部分,并解释了克罗克福德建议您避免的 “不良部分”。通过了解它们,您可以正确使用它们并避免陷阱。

前进与前进 ” 一书包括有关平等的部分,其中简要说明了何时使用松散( == )与严格( === )运算符:

要将大量细节归结为一些简单的要点,并帮助您知道在各种情况下是使用==还是=== ,这是我的简单规则:

  • 如果比较中的任何一个值(又称正值)可以是truefalse ,请避免==并使用===
  • 如果比较中的任何一个值都可以是这些特定值( 0""[] - 空数组),请避免==并使用===
  • 所有其他情况下,您可以放心使用== 。它不仅安全,而且在许多情况下以提高可读性的方式简化了代码。

对于那些不想花时间真正理解 Javascript 的开发人员,我仍然推荐 Crockford 的演讲。对于偶尔仅使用 Javascript 的开发人员来说,这是一个很好的建议。

如果您知道它们是字符串,则无需检查类型。

"a" == "b"

但是,请注意,字符串对象将不相等。

new String("a") == new String("a")

将返回 false。

调用 valueOf()方法将其转换为 String 对象的基元,

new String("a").valueOf() == new String("a").valueOf()

将返回 true

答案的唯一补充:如果所有这些方法都返回 false,即使字符串看起来相等,一个字符串的左侧和 / 或右侧也可能存在空格。因此,只需在比较之前将.trim()放在字符串的末尾即可:

if(s1.trim() === s2.trim())
{
    // your code
}

我已经花了很多时间试图找出问题所在。希望这对某人有帮助!

导致我提出这个问题的是paddingwhite-spaces

检查我的情况

if (title === "LastName")
      doSomething();

标题是" LastName"

在此处输入图片说明

所以也许你必须像这样使用trim功能

var title = $(this).text().trim();

除非您真的知道强制的工作方式,否则应避免==而应使用标识运算符===但是您应该阅读此书以了解其工作原理

如果使用== ,则可以让语言为您执行某种类型的强制转换,例如:

"1" == 1 // true
"0" == false // true
[] == false // true

正如道格拉斯 · 克罗克福德(Douglas Crockford)在他的书中所说:

始终最好使用身份运算符。

实际上,可以使用两种方法在 javascript 中创建字符串。

  1. var str = 'Javascript';这将创建一个原始字符串值。

  2. var obj = new String('Javascript');这将创建String类型的包装对象。

    typeof str // string
    typeof obj // object

因此,检查相等性的最佳方法是使用===运算符,因为它会同时检查两个操作数的值和类型。

如果要检查两个对象之间是否相等,则使用String.prototype.valueOf是正确的方法。

new String('javascript').valueOf() == new String('javascript').valueOf()

可以使用JSON.stringyfy()技巧检查 String Objects

var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);

我在测试过程中提出了一个替代解决方案。您可以在字符串原型上使用 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 浏览器中正常工作