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
您没有向我们展示所有的代码;)
如果
body
为
undefined
,则代码块将运行,因为它在 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