这是代码:
if(!typeOf(node.parentNode)) return null;
这是错误:
Uncaught TypeError: Cannot read property 'parentNode' of null
我正在尝试测试它是否为 null/undefined/false。但它不断向我发送错误。
如何在 if 语句不出错的情况下对其进行测试?
这是代码:
if(!typeOf(node.parentNode)) return null;
这是错误:
Uncaught TypeError: Cannot read property 'parentNode' of null
我正在尝试测试它是否为 null/undefined/false。但它不断向我发送错误。
如何在 if 语句不出错的情况下对其进行测试?
也测试对象引用:
if (!node || !node.parentNode) return null;
如果“节点”真的可以是任何东西(例如,除了对象引用之外的字符串或数字),您还需要测试类型。
您必须检查是否node
是null
第一个。
if(!node || !node.parentNode) {
return null;
}
这也称为“短路”评估。当它看到!node
是true
时,它将立即执行块内的内容,因为运算符是 OR( ||
),并且在 OR 中,如果输入之一是true
,则结果只能是true
。
另外,typeof
是一个关键字;不是函数(尽管您的代码仍然可以工作)。
正如提到的其他答案,您的特定错误来自您的节点对象实际上为空的事实。测试 node.parentNode 是否存在且不为空的最安全的方法是:
if ((typeof node==='undefined') || !node || !node.parentNode) return null;
这包括以下情况:
node
存在node
变量为空或未定义parentNode
是假的 ( undefined, null, false, 0, NaN, or ''
)根据 Blue Skies 的评论,您应该注意第一次检查 ( typeof node === 'undefined'
),因为它会掩盖未声明的变量,这可能会导致以后出现问题:
function f() {
if (typeof node==='undefined') {
node = {}; // global variable node, usually not what you want
}
}
try {
if (!typeOf(node.parentNode)) return null;
} catch (err) {
console.log(err);
}