夥計們, 我有一個如果要檢查是否err
聲明定義,如果是這樣,看看它ETIMEDOUT
或ESOCKETTIMEDOUT
的JavaScript如果&&或
這是語法上的聲音?
if (err && err.code === 'ETIMEDOUT' || 'ESOCKETTIMEDOUT') {
}
還是應該看起來像:
if (err && (err.code === 'ETIMEDOUT' || 'ESOCKETTIMEDOUT')) {
}
夥計們, 我有一個如果要檢查是否err
聲明定義,如果是這樣,看看它ETIMEDOUT
或ESOCKETTIMEDOUT
的JavaScript如果&&或
這是語法上的聲音?
if (err && err.code === 'ETIMEDOUT' || 'ESOCKETTIMEDOUT') {
}
還是應該看起來像:
if (err && (err.code === 'ETIMEDOUT' || 'ESOCKETTIMEDOUT')) {
}
否,則必須針對一個變量每個檢查指定的充分體現。
if (err && (err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT')) {
的第一張支票,只是err
,計算結果爲布爾,但只是檢查'ESOCKETTIMEDOUT'
將始終爲true。
它應該是這樣的:
if (err && (err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT')) {
}
的原因是,在JavaScript:
邏輯表達式求值從左向右
而且& &運營商將創造一個err
和err.code === 'ETIMEDOUT'
之間的「連接」,同時還是會REC eive:
(err && err.code === 'ETIMEDOUT') || err.code === 'ESOCKETTIMEDOUT'
的另一個問題是缺少在第三表達err.code ===
,正如在JavaScript中沒有空字符串是truthy,它總是true
。
'(err &&(err.code ==='ETIMEDOUT'|| err.code ==='ESOCKETTIMEDOUT'))' –
'err.code ==='ETIMEDOUT'|| 「ESOCKETTIMEDOUT''是一個問題,因爲'err.code === 'ETIMEDOUT''計算結果爲TRUE;或'FALSE',但是'' ESOCKETTIMEDOUT''沒有。 – alex
在發佈到StackOverflow之前,請嘗試在本地運行程序,甚至將結果作爲JSFiddle發佈。如果你發現有錯誤,那麼通過一切手段繼續詢問。但是,即使通過打印console.log()語句來測試邏輯也很容易。 – onebree