为什么逻辑不能包含未定义的

时间:2017-08-14 06:51:43

标签: javascript logic

我有以下代码

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

因此,如果密码与登录相匹配,但如果用户名不存在,它会导致users[username]["password"]未定义,并破坏代码,所以我想知道如何让if当遇到未定义而不是停止代码时传递false语句?

1 个答案:

答案 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