0

这是代码:

if(!typeOf(node.parentNode)) return null;

这是错误:

Uncaught TypeError: Cannot read property 'parentNode' of null

我正在尝试测试它是否为 null/undefined/false。但它不断向我发送错误。

如何在 if 语句不出错的情况下对其进行测试?

4

4 回答 4

2

也测试对象引用:

if (!node || !node.parentNode) return null;

如果“节点”真的可以是任何东西(例如,除了对象引用之外的字符串或数字),您还需要测试类型。

于 2013-10-30T16:00:28.807 回答
1

您必须检查是否nodenull第一个。

if(!node || !node.parentNode) {
    return null;
}

这也称为“短路”评估。当它看到!nodetrue时,它将立即执行块内的内容,因为运算符是 OR( ||),并且在 OR 中,如果输入之一是true,则结果只能是true

另外,typeof是一个关键字;不是函数(尽管您的代码仍然可以工作)。

于 2013-10-30T16:01:38.350 回答
1

正如提到的其他答案,您的特定错误来自您的节点对象实际上为空的事实。测试 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
  }
}
于 2013-10-30T16:10:51.373 回答
-1
try {
        if (!typeOf(node.parentNode)) return null;
    } catch (err) {
        console.log(err);
    }
于 2013-10-30T16:02:54.643 回答