如果我比较“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);
}
答案 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 :(得分: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值时,!null
为true
而!''
为true
,因此这些值会相等。
这是测试(从我的控制台截屏):
答案 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
希望有所帮助