JS / NodeJS TypeError

时间:2015-10-28 13:43:49

标签: javascript node.js

我有以下声明,如果已设置,我希望返回任何这些值,否则只返回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'];

有人可以提出更好的方法吗?

1 个答案:

答案 0 :(得分:3)

  

无法读取未定义的属性

这意味着,如果您a.b.c ab未定义,而不是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'];
    }
}