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

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

古一L2020/03/10 12:23:42

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

前端LEYLEY2020/03/10 12:23:42

最简单的方法是使用三元运算符,如下所示:

 "was" = "was" ? true : false

但是,如果要比较的字符串在数组中,则将使用es6过滤器

let stringArray  = [men, boys, girls, sit, can, gotten]
stringArray.filter(I=> I === boys ? 
stringArray.pop(indexOf(I)) : null)

上面将检查您的stringArray以及从数组中匹配它的任何字符串,在本例中,我们选择了“ boys”

Sam小哥理查德2020/03/10 12:23:42

考虑到这两个字符串可能是非常大的,有2种主要的方法bitwise searchlocaleCompare

我推荐这个功能

function compareLargeStrings(a,b){
    if (a.length !== b.length) {
         return false;
    }
    return a.localeCompare(b) === 0;
}
Pro伽罗2020/03/10 12:23:42

Objects可以使用JSON.stringyfy()技巧检查字符串

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

JinJin小卤蛋2020/03/10 12:23:42

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

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

I have lost hours trying to figure out what is wrong. Hope this will help to someone!

乐十三2020/03/10 12:23:42

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

检查我的情况

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

标题是 " LastName"

在此处输入图片说明

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

var title = $(this).text().trim();
A小卤蛋Pro2020/03/10 12:23:42

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

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

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

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

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

Tony樱番长2020/03/10 12:23:42

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

"a" == "b"

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

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

将返回false。

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

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

将返回true