如何在JavaScript中测试两个字符串的等价性,考虑null和空字符串相同?

时间:2015-12-01 01:06:47

标签: javascript

如果我比较“a”和“b”,那应该是假的 如果我比较“a”和“a”,那应该是真的 如果我比较“”和null,那应该是真的。

我可以编写自己的方法,但认为可能有一个JavaScript快捷方式。

编辑:我在想这样的事情:

areDbSame(s1, s2) {
    if (s1 === null) s1 = "";
    if (s2 === null) s2 = "";
    return s1 === s2;
} 

Edit2:在这个版本上定居:

areDbSame(s1, s2) {
    return (s1 === null ? "" : s1) === (s2 === null ? "" : s2);
} 

4 个答案:

答案 0 :(得分:3)

在测试字符串相等性之前,您可以通过在''的情况下转换为null来执行简单的一行强制执行。例如(如果你也不关心undefined,false等):

// testString becomes the one you are testing
var testString = myString || '';

如果您只想确保null为空

var testString = (myString === null) ? '' : myString;

然后你可以使用testString简单地进行字符串比较,而不用担心空的等式。

IMO这是最干净的答案,因为它没有卷入javascript字符串的原始相等测试。与说法相同,让我们将问题分成两部分。

  • 1)我的字符串何时应该被视为空白,
  • 2)现在我可以检查常规字符串是否相等。

答案 1 :(得分:1)

function areEqualStrings(a, b) {
  var otherEqualValues = ['', null];

  if(typeof a === 'string' && typeof b === 'string') {
    return a === b;
  } else if(otherEqualValues.indexOf(a) > -1 && otherEqualValues.indexOf(b) > -1) {
    return !a === !b;
  } else {
    return false;
  }
}

在强制执行JavaScript值时,!nulltrue!''true,因此这些值会相等。

这是测试(从我的控制台截屏):

enter image description here

答案 2 :(得分:0)

这个功能应该这样做。它首先进行类型检查,否则进行短路。

function stringCompare(a, b) {
    if (((a === null || typeof a === 'string') ||
         (b === null || typeof b === 'string')) &&
        ((a === '' && b === null) ||
         (b === '' && a === null) ||
         (a === b))) {
        return true;
    }
    return false;
}

答案 3 :(得分:0)

不,它没有。你可以自然地使用operator =做的两个第一种情况。 第三种情况是不可能的,因为“”被认为是空字符串而null是任何类型。所以他们永远不会自然而然。要做到这一点,你必须编写自己的方法。

要清楚。您可以使用运算符=(等于)进行比较:

==等于

`x == 8     false
 x == 5     true
 x == "5"   true

===等值和等号

 x === 5    true
 x === "5"  false

希望有所帮助