2017-08-14 38 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