2015-12-01 29 views
1

如果我比較「a」和「b」,那應該是錯誤的。
如果我比較「a」和「a」,那應該是真的。
如果我比較「」和null,那應該是真的。如何在JavaScript中測試兩個字符串的等價性,考慮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); 
} 
+1

你很可能將不得不寫你自己的。 – epascarello

+0

您需要一個自定義方法,因爲「」和null永遠不會相同。爲了評估這種情況,你需要定製邏輯。 – ThisClark

+3

因爲有人認爲它值得-1。通常要求沒有演示的快捷方式的問題通常會被降低。我很驚訝它不低。 – epascarello

回答

3

您測試您的字符串的平等就在,你可以做一個簡單的一條線執法,通過的情況下轉換爲''null。例如(如果你也不在乎不確定的,假的,等):

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

如果你只是想確保null是空白

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

然後,你可以簡單地做使用字符串比較testString,而不用擔心空等值。


IMO這是最乾淨的答案,因爲它不會卷積JavaScript字符串的原始平等測試。這同樣如此,我們將問題分成兩部分。

  • 1)何時應我的字符串被認爲是空白,
  • 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; 
} 
0

不,它沒有。您可以使用operator =自然地執行兩個第一種情況。 第三種情況是不可能的,因爲「」被認爲是一個空字符串,null有任何類型。所以他們永遠不可能是真實的。要做到這一點,你必須編寫自己的方法。

只是要清楚。您可以使用運算符=(等於)做對比:

==等於

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

===同等價值,平等型

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

希望它可以幫助

+1

*「...且null有任何類型。」*'null'實際上是Null類型。 –

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,所以那些會導致平等。

這裏是(從我的控制檯screenshotted)測試:

enter image description here

+0

你不需要使用兩個'!!'一個就足夠了 – Endless

+0

@Endless,很好,趕上,謝謝。 –

+2

'areEqualString('',0)'?你認爲輸入總是字符串和'null'? –

相關問題