有条件地检查有时可能未定义的值是否不等于另一个值?

时间:2017-02-01 00:37:12

标签: javascript conditional

var query = [], name = 'name';

if (body.displayName !== req.user.displayName) {
    query.push({
        displayName: name
    });
}

这很有效,但我遇到了req.user.displayName === undefined

的用例

直观地说,似乎undefined也不等于body.displayName,但当然会引发错误:

  

“无法读取未定义的属性”

无论如何有条件地检查值是undefined并且在同一if语句中也不等于body.displayName,或者是将其嵌套在另一个if语句中的唯一方法:< / p>

if (req.user.displayName !== undefined) { }

2 个答案:

答案 0 :(得分:1)

该错误不能来自req.user.displayName undefined。它来自于尝试读取未定义的属性,这意味着罪魁祸首是bodyreqreq.userundefined

这是来自node.js的成绩单:

> body = {displayName: "foo"}
{ displayName: 'foo' }
> req = {user: {displayName: undefined}}
{ user: { displayName: undefined } }
> req.user
{ displayName: undefined }
> req.user.displayName
undefined
> body.displayName !== req.user.displayName
true

完全没问题,即使req.user.displayNameundefined

您无需更改if测试;你需要追踪其中一个其他对象为undefined

答案 1 :(得分:1)

所以弄清楚什么是未定义的

console.log(req);
console.log(req.user);

我假设错误是用户未设置。如果这可能是真的,那么你就没有问题。如果它应该有一个用户而不是你有一个bug。

但是基本检查会使用真正的检查来确保对象在那里。取决于未定义的内容,它可以是以下任何一种。

if (req && req.user && req.user.displayName !== body.displayName)

if (req.user && req.user.displayName !== body.displayName)

或如果bodyundefined,您需要以另一种方式进行检查。