2017-08-14 36 views
-1

我有以下代碼爲什麼如果邏輯不能包含未定義

if (users[username]["password"] == password) { 
    console.log("user auth!"); 
} 

因此,如果密碼匹配它登錄,但不知何故,如果用戶名不存在,它會導致users[username]["password"]爲undefined,並打破代碼,所以我想知道如何通過false聲明時遇到undefined而不是停止代碼?

+1

'如果(用戶[用戶名] &&用戶[用戶名]。密碼===密碼)' – Li357

+0

是吧'用戶[用戶名]'或'用戶[ '用戶名'] '? –

+2

像'if(username in users && users [username] .password === password)'? – Ryan

回答

1
foo = {} 
foo.bar // You will get an undefined. 
foo.bar.baz // You will get a TypeError if there's no bar in foo. 

這是因爲JavaScript引擎無法讀取未定義的屬性。

foo.bar && foo.bar.baz代替條件可以解決您的問題。

這樣,如果foo.bar未定義,則當引擎遇到foo.bar並獲得undefined時,此邏輯表達式的值將設置爲undefined。引擎不會繼續嘗試獲得值foo.bar.baz

但是,如果定義了foo.bar,則引擎將進入並且表達式的值將被正確設置爲foo.bar.baz

它是JavaScript中邏輯運算符的特徵。這裏
你可以找到更多的細節 Logical Operators - JavaScript | MDN

+0

所以這是最小的代碼? – Munucial

+0

我這麼認爲。它比傳統的方式更短,適用範圍更廣。 – Cipher