簡體   English   中英

Javascript:哪種方法最好檢查條件語句?

[英]Javascript: Which way is better to check conditional statement?

在javascript中,哪種方法在性能,健壯性方面是檢查條件語句的更好方法,並且哪種方法最佳?

var x = null;
// this condition is checked frequently and x will be set to null or some value accordingly
if(x !== null){...}
 OR
if(!!x){...}

你可以做

if (x) { ... }

簡單地說,如果x是真實值。

正如尼娜指出的。 我總是會添加一些額外的驗證,具體取決於我的期望。

if (x && x > 0) { ... }

要么

if (x && x instanceof Array)

但我一直在檢查x是否具有某種值並且不是undefined或為null

永遠不需要編寫if(!!x){...} 這與編寫if(x){...}完全相同。 使用! 運算符兩次將一個值轉換為一個布爾值,以反映該值是否“真實”。 但是無論如何, if語句會這樣做:它測試您提供的值是否“真實”。 因此,無論您使用!! 還是不,它會做同樣的事情。

if(x !== null){...}完全是另外一回事。 它不僅檢查x是否“真實”,還專門將x的值與null進行比較。 例如,如果x的數值為0if(x){...}if(!!x){...}不會執行...代碼,因為0是一個“假”值,但是if(x!==null) 執行...代碼,因為0null

一個相關的示例是if(x!=null){...}if(x==null){...} (請注意,使用!===代替!===== 。)這是JavaScript中的一種特殊情況。 當你比較反對null使用!===操作符,它實際上比較反對任何nullundefined和對待這兩個值相同。 換句話說,如果x 要么是 nullundefined ,那么if(x==null){...}將執行...代碼,但if(x!=null){...}將不執行...代碼。

通常建議避免使用==!=運算符,而應使用嚴格的比較===!== ,但是在某些情況下將nullundefined視為相同可能會很有用,因此在這種情況下,非嚴格操作員會有所幫助。

無論如何,真正要問的問題是代碼的目的是什么,在這里您需要具體測試什么?

假設您需要檢查一個嚴格不等式的值!== null

經常檢查此條件,並將x設置為null或相應的某個值

if (x !== null) { /* */ }

然后,您只能使用上面的比較。 任何其他比較都會返回錯誤的結果。

例如

 var x = 0; if (x !== null) { // true console.log(x + ' !== null'); } if (x) { // false console.log(x); } // some more checks console.log(undefined !== null); // true console.log(undefined != null); // false 

編輯:我的回答是很錯誤的,這是我在與Nina Scholz對話后對她自己的回應中得知的。 我進行了相應的更新。

有多種檢查值的方法,具體取決於您希望使用的類型。 因此,問題不僅僅在於性能,而在於正確的評估。 從您的示例開始:

if(x != null)

如果x的值為null或“ undefined”,則該值為false

下一種情況:

if(!!x)

這是完全不同的操作。 它將x的值強制轉換為布爾值,並且在大多數情況下if(x)將以相同的方式工作。 但是現在,如果值是虛假的(如0),則為空字符串,則表達式返回false 因此,如果需要一個數字,則應檢查零值:

if(x || (0 === x))

請記住,如果x不是int,則表達式返回true。

在您期望字符串的情況下:

if(x || ('' === x))

同樣,如果x為12,則表達式返回true。

我可以舉很多例子。 不幸的是,某些表達式以意外的方式起作用。 例如,通過調用isNaN(number)可以很容易地檢查一個值是否為數字,但是如果該值為空字符串或數組索引的表示形式(“ 2 ”),則isNaN返回false。

我建議您檢查所有類型轉換的 ,以便您更加了解如何檢查值的有效性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM