我有以下代碼爲什麼如果邏輯不能包含未定義
if (users[username]["password"] == password) {
console.log("user auth!");
}
因此,如果密碼匹配它登錄,但不知何故,如果用戶名不存在,它會導致users[username]["password"]
爲undefined,並打破代碼,所以我想知道如何通過false
聲明時遇到undefined而不是停止代碼?
我有以下代碼爲什麼如果邏輯不能包含未定義
if (users[username]["password"] == password) {
console.log("user auth!");
}
因此,如果密碼匹配它登錄,但不知何故,如果用戶名不存在,它會導致users[username]["password"]
爲undefined,並打破代碼,所以我想知道如何通過false
聲明時遇到undefined而不是停止代碼?
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
'如果(用戶[用戶名] &&用戶[用戶名]。密碼===密碼)' – Li357
是吧'用戶[用戶名]'或'用戶[ '用戶名'] '? –
像'if(username in users && users [username] .password === password)'? – Ryan