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
。它来自试图读取未定义的东西的属性,这意味着罪魁祸首是body
、req
或req.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
。