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


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 语句中的唯一方法:

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

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

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

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

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

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

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

或者,如果body undefined,则需要以另一种方式进行检查。

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

以下是 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.displayName undefined.

你不需要改变你的if测试;你需要追踪为什么这些其他对象undefined

最新更新