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

Conditionally check if a value that may at times be undefined is not equal to another value?

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

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

这行得通,但我 运行 进入了 req.user.displayName === undefined.

的用例

直觉上,似乎 undefined 也不等于 body.displayName,但当然会抛出错误:

"cannot read property of undefined"

是否有条件地检查同一个 if 语句中的值是否为 undefined 且不等于 body.displayName,或者是将其嵌套在另一个 if 语句中的唯一方法:

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

该错误不可能来自 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.

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

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

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

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

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

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

或者如果 bodyundefined,则您需要以其他方式进行检查。