首页 文章

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

提问于
浏览
649

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

8 回答

  • 162

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

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

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

  • 10

    实际上有两种方法可以在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()
    
  • 9

    我在测试期间想出了另一种解决方案 . 你可以在字符串原型上使用函数 .

    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浏览器

  • 511

    始终在您完全理解使用 ===== 运算符的差异和含义之前,请使用 === 运算符,因为它将使您免于模糊(非明显)错误和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中工作的开发人员来说是个好建议 .

  • 37

    可以使用此hack JSON.stringyfy() 检查字符串 Objects

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

    让我想到这个问题的是 paddingwhite-spaces

    检查我的情况

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

    和 Headers 是 " LastName"

    enter image description here

    所以也许你必须使用像这样的修剪功能

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

    如果您知道它们是字符串,那么就不需要检查类型 .

    "a" == "b"
    

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

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

    将返回false .

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

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

    将返回true

  • -4

    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
    

    道格拉斯·克罗克福德在他的书中说:

    总是更好地使用身份运算符 .

相关问题