开发者问题收集

Javascript - 如果(变量)检查“未定义”则失败[关闭]

2018-03-13
315
if( !body || body[0] === '<') {...}

我使用上述语句检查变量 body 是否为 undefined 或 null 或除预期值以外的任何值,但我一直收到 TypeError:

TypeError: Cannot read property '0' of undefined

怎么会这样?根据关于检查未定义的非常流行的答案,如果 body 是 null、undefined、NaN、""、0 或 false 中的任何值,则上述语句的第一部分 !body 应该返回 true - 因此在这种情况下不评估 OR 条件的右侧: body[0] === '<'

是否有标准函数用于检查 JavaScript 中变量是否为 null、undefined 或空白?

我还可以检查什么来确保 body[0] 仅在 body 未定义时调用?我也已经尝试过 if(typeof body === 'undefined' || body[0] === '<') ,其行为与所述相同。任何对此的想法都将不胜感激。谢谢。

(仅供进一步参考: body 是 REST-API 请求的响应,如果一切顺利,它将返回一个可以解析为 JSON 对象的字符串。但是,在某些情况下,会返回整个 HTML 文件(包含错误信息),因此我在响应的开头检查“<”。有时变量似乎是“未定义的”,这会在检查 body[0] 时引发错误。)

3个回答

我认为你的逻辑是错误的。

function isFirstCharLt(value) {
  return !!value && typeof value === 'string' && value[0] === '<';
}

console.log(isFirstCharLt(undefined));
console.log(isFirstCharLt(null));
console.log(isFirstCharLt('<string'));
console.log(isFirstCharLt('string'));
Amos47
2018-03-13

您没有向我们展示所有的代码;)

如果 bodyundefined ,则代码块将运行,因为它在 if 语句中快捷方式 || 并且我怀疑您正在检查该代码块中某处的 body[0]

if (!body || body[0] === '<') {
  // is body[0] used here? 
}

最好确保 body 具有正确的属性,例如

if (typeof body === 'string' && body[0] === '<') {}
ralphtheninja
2018-03-14

我将使用两个 if 语句,先检查其是否定义然后验证:

if(body) {
  if (body[0] !== '<') {
    'DO-SOMETHING'
  }
}
Kyle Joeckel
2018-03-13