我有以下代码
if (users[username]["password"] == password) {
console.log("user auth!");
}
因此,如果密码与登录相匹配,但如果用户名不存在,它会导致users[username]["password"]
未定义,并破坏代码,所以我想知道如何让if当遇到未定义而不是停止代码时传递false
语句?
答案 0 :(得分: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
未定义,则当引擎符合undefined
并获得foo.bar
时,此逻辑表达式的值将设置为undefined
。引擎不会继续尝试获取foo.bar.baz
的值。
但是如果定义了foo.bar
,引擎将会转到,表达式的值将正确设置为foo.bar.baz
。
它是JavaScript中逻辑运算符的特性 你可以在这里找到更多细节 Logical Operators - JavaScript | MDN