我有以下声明,如果已设置,我希望返回任何这些值,否则只返回null。
var token = request.body.token || request.query.token || request.headers['x-access-token'];
但是,如果未设置其中一个,则会抛出TypeError异常(无法读取未定义的属性)。
我认为这样的事情可能就是解决办法,但它却抛出同样的例外:
var token = (typeof request.body.token === 'undefined') ? null : request.body.token || (typeof request.query.token === 'undefined') ? null : request.query.token || (typeof request.headers['x-access-token'] === 'undefined') ? null : request.headers['x-access-token'];
有人可以提出更好的方法吗?
答案 0 :(得分:3)
无法读取未定义的属性
这意味着,如果您a.b.c
a
或b
未定义,而不是c
,那么您无法测试{c
的定义1}}。
有人可以提出更好的方法吗?
避免使用三元运算符进行复杂的测试。返回使用if
和多行。它更容易阅读,编写和维护。
var token;
if (request) { // In a separate `if` because it is common to all the tests
if (request.body && request.body.token) {
token = request.body.token;
} else if (request.query && request.query.token) {
token = request.query.token;
} else if (request.headers && request.headers['x-access-token']) {
token = request.headers['x-access-token'];
}
}