2015-06-22 16 views
-4

夥計們, 我有一個如果要檢查是否err聲明定義,如果是這樣,看看它ETIMEDOUTESOCKETTIMEDOUT的JavaScript如果&&或

這是語法上的聲音?

if (err && err.code === 'ETIMEDOUT' || 'ESOCKETTIMEDOUT') { 
} 

還是應該看起來像:

if (err && (err.code === 'ETIMEDOUT' || 'ESOCKETTIMEDOUT')) { 
} 
+1

'(err &&(err.code ==='ETIMEDOUT'|| err.code ==='ESOCKETTIMEDOUT'))' –

+0

'err.code ==='ETIMEDOUT'|| 「ESOCKETTIMEDOUT''是一個問題,因爲'err.code === 'ETIMEDOUT''計算結果爲TRUE;或'FALSE',但是'' ESOCKETTIMEDOUT''沒有。 – alex

+0

在發佈到StackOverflow之前,請嘗試在本地運行程序,甚至將結果作爲JSFiddle發佈。如果你發現有錯誤,那麼通過一切手段繼續詢問。但是,即使通過打印console.log()語句來測試邏輯也很容易。 – onebree

回答

3

否,則必須針對一個變量每個檢查指定的充分體現。

if (err && (err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT')) { 

的第一張支票,只是err,計算結果爲布爾,但只是檢查'ESOCKETTIMEDOUT'將始終爲true。

3

它應該是這樣的:

if (err && (err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT')) { 
} 

的原因是,在JavaScript:

邏輯表達式求值從左向右

而且& &運營商將創造一個errerr.code === 'ETIMEDOUT'之間的「連接」,同時還是會REC eive:

(err && err.code === 'ETIMEDOUT') || err.code === 'ESOCKETTIMEDOUT'

的另一個問題是缺少在第三表達err.code ===,正如在JavaScript中沒有空字符串是truthy,它總是true

+0

查看次數爲?哈哈 –

+0

哇,stackoverflow。哇哇! –

+0

我認爲這可能是一個人低估了多個回答,因爲其他答案之一也迅速下降了。 – Blubberguy22