2014-12-05 40 views
-1

我有一個由用戶輸入定義的變量。我只想在未定義的情況下替換它的值。但如果是NaN則不行。我該怎麼做?Javascript - 用undefined替換爲0

我試着做x || 0,但也取代了NaN值。

+1

'的typeof X === undefined'' – ajp15243 2014-12-05 16:15:57

+0

很快做到這一點,你可以展示你的代碼,請。 – putvande 2014-12-05 16:17:06

+1

讓我們來看看,如何檢查是否有未定義的東西?這聽起來像我可能會測試一些東西的聲明!也許我可以嘗試一個'if'語句。但是,情況會是怎樣?也許這將是一個「平等」的條件,你知道,這是'==='。所以只是猜測,但也許'x === undefined'可以工作,或者完成'if'語句,if(x === undefined)'。那裏,那並不難。 – 2014-12-05 16:19:45

回答

1

您可以對undefined值進行嚴格比較。

if (x === undefined) { 
    x = 0; 
} 

當然你要確保x已經正確申報如常。

如果您有關於undefined值由非常糟糕的代碼(用新值覆蓋)被困擾的任何敏感,那麼你可以使用void運營商獲得有保證的undefined。你可以做一個比較嚴格的undefined值。

if (x === void 0) { 
    x = 0; 
} 

void無關的操作數。不管你給它什麼,它都會返回undefined

這些都是等價的:

if (x === void undefined) { 
    x = 0; 
} 

if (x === void "foobar") { 
    x = 0; 
} 

if (x === void x) { 
    x = 0; 
} 

最後,如果有人壓扁undefined本地(不能再全球壓扁),這是更好地解決這個糟糕的代碼。


如果你想同時檢查nullundefined在同一時間,只有那些價值,你可以用==,而不是===

if (x == null) { 
    x = 0; 
} 

現在x將被設置爲0,如果這是不是nullundefined,但沒有任何其他價值。您也可以在測試中使用undefined。完全一樣。

if (x == undefined) { 
    x = 0; 
} 

從你的問題,好像你一點點會專門找number元素,甚至NaN。如果您想將其限制爲原始數字,包括NaN,則使用typeof進行測試。

if (typeof x !== "number") { 
    x = 0; 
} 

但是,你會失去數字字符串,並且可以成功地轉換爲數字的其他值,所以這取決於你最終需要。

+0

如果我定義的變量如下: var x = parseFloat(self.y()); 在這種情況下,x總是成爲NaN,不管x是未定義的還是NaN。有沒有什麼辦法可以檢查X是否未定義? – user3312508 2014-12-05 16:42:22

+0

@ user3312508:您只需使用'if'語句。你說如果'x'不是'undefined',那麼你想運行'parseFloat(self.y());'部分並將它分配給'x',對吧? – 2014-12-05 16:45:12

1

您可以測試使用typeof(除其他事項外):

if (typeof x == 'undefined') x = y; 

另一種方法是,以測試對未定義全等:

if (x === void 0) x = y 

在這種情況下,我們使用void 0以來undefined安全實際上可以重新定義。

+1

*「,因爲'undefined'實際上可以被重新定義。」*自ES5以來。 – 2014-12-05 16:23:03

+1

當然,但是作爲一個實際問題,我幾乎不建議讓一個不知道如何寫if語句的人混淆,以比較某些未定義的東西,比如void 0,以及它與實際上不存在的概率之間的關係'undefined'已被重新定義,這是我在十多年的JS編程中從未見過的東西。 – 2014-12-05 16:24:20

+1

@torazaburo:*「......我在JS編程的十多年中從未見過的東西」*你和我都是。讓我感到奇怪的是,人們對全球「未定義」的重新定義或影子的迷戀,而不是其他全球定義的影子。 – 2014-12-05 16:28:45

0

你可以只用

x === undefined && (x = 0); 
+1

這是不好的語法,會失敗大多數棉絨。 – 2014-12-05 16:20:26

+0

我接受linters會抱怨意外的任務,但我不明白爲什麼這是「糟糕的語法」。它利用了邏輯運算符可以短路的事實。 – 2014-12-05 16:23:53

+1

讓縮小器做這種重寫,其中大部分都會做。對於普通人來說,寫if語句作爲if語句。 – 2014-12-05 16:25:54