![](/img/trans.png)
[英]Better way to check multiple OR condition within single if statement in 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
的數值為0
, if(x){...}
或if(!!x){...}
將不會執行...
代碼,因為0
是一個“假”值,但是if(x!==null)
將執行...
代碼,因為0
與null
。
一個相關的示例是if(x!=null){...}
或if(x==null){...}
。 (請注意,使用!=
或==
代替!==
或===
。)這是JavaScript中的一種特殊情況。 當你比較反對null
使用!=
或==
操作符,它實際上比較反對任何null
或undefined
和對待這兩個值相同。 換句話說,如果x
要么是 null
或undefined
,那么if(x==null){...}
將執行...
代碼,但if(x!=null){...}
將不執行...
代碼。
通常建議避免使用==
和!=
運算符,而應使用嚴格的比較===
或!==
,但是在某些情況下將null
和undefined
視為相同可能會很有用,因此在這種情況下,非嚴格操作員會有所幫助。
無論如何,真正要問的問題是代碼的目的是什么,在這里您需要具體測試什么?
經常檢查此條件,並將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.