如何在JavaScript中测试方法而不出错?

如何在JavaScript中测试方法而不出错?,javascript,Javascript,代码如下: if(!typeOf(node.parentNode)) return null; 以下是错误: Uncaught TypeError: Cannot read property 'parentNode' of null 我正在尝试测试它是否为null/未定义/false。但它不断地向我发送错误 如何测试它而不使if语句出错?也测试对象引用: if (!node || !node.parentNode) return null; 如果“node”真的可以是任何东西(例如,对象引

代码如下:

if(!typeOf(node.parentNode)) return null;
以下是错误:

Uncaught TypeError: Cannot read property 'parentNode' of null
我正在尝试测试它是否为null/未定义/false。但它不断地向我发送错误


如何测试它而不使if语句出错?

也测试对象引用:

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

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

也测试对象引用:

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

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

也测试对象引用:

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

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

也测试对象引用:

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

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

您必须先检查
node
是否为
null

if(!node || !node.parentNode) {
    return null;
}
这也称为“短路”评估。当它看到
!节点
,它将立即执行块内的内容,因为运算符是OR(
|
),并且在或中,如果其中一个输入为
,则结果只能是


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

首先必须检查
节点
是否为
null

if(!node || !node.parentNode) {
    return null;
}
这也称为“短路”评估。当它看到
!节点
,它将立即执行块内的内容,因为运算符是OR(
|
),并且在或中,如果其中一个输入为
,则结果只能是


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

首先必须检查
节点
是否为
null

if(!node || !node.parentNode) {
    return null;
}
这也称为“短路”评估。当它看到
!节点
,它将立即执行块内的内容,因为运算符是OR(
|
),并且在或中,如果其中一个输入为
,则结果只能是


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

首先必须检查
节点
是否为
null

if(!node || !node.parentNode) {
    return null;
}
这也称为“短路”评估。当它看到
!节点
,它将立即执行块内的内容,因为运算符是OR(
|
),并且在或中,如果其中一个输入为
,则结果只能是


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

正如其他答案所提到的,您的特定错误来自于您的节点对象实际上是空的。如果node.parentNode存在且不为null,最可靠的测试方法是:

if ((typeof node==='undefined') || !node || !node.parentNode) return null;
这包括以下情况:

  • 节点
    变量不存在
  • 节点
    变量为空或未定义
  • parentNode
    是falsy(
    未定义、null、false、0、NaN或“”
根据Blue Skys的评论,您应该注意第一次检查(
typeof node===“undefined”
),因为它掩盖了未声明的变量,这可能会导致以后出现问题:

function f() {
  if (typeof node==='undefined') {
     node = {}; // global variable node, usually not what you want
  }
}

正如前面提到的其他答案一样,您的特定错误来自这样一个事实:您的节点对象实际上是空的。如果node.parentNode存在且不为null,最可靠的测试方法是:

if ((typeof node==='undefined') || !node || !node.parentNode) return null;
这包括以下情况:

  • 节点
    变量不存在
  • 节点
    变量为空或未定义
  • parentNode
    是falsy(
    未定义、null、false、0、NaN或“”
根据Blue Skys的评论,您应该注意第一次检查(
typeof node===“undefined”
),因为它掩盖了未声明的变量,这可能会导致以后出现问题:

function f() {
  if (typeof node==='undefined') {
     node = {}; // global variable node, usually not what you want
  }
}

正如前面提到的其他答案一样,您的特定错误来自这样一个事实:您的节点对象实际上是空的。如果node.parentNode存在且不为null,最可靠的测试方法是:

if ((typeof node==='undefined') || !node || !node.parentNode) return null;
这包括以下情况:

  • 节点
    变量不存在
  • 节点
    变量为空或未定义
  • parentNode
    是falsy(
    未定义、null、false、0、NaN或“”
根据Blue Skys的评论,您应该注意第一次检查(
typeof node===“undefined”
),因为它掩盖了未声明的变量,这可能会导致以后出现问题:

function f() {
  if (typeof node==='undefined') {
     node = {}; // global variable node, usually not what you want
  }
}

正如前面提到的其他答案一样,您的特定错误来自这样一个事实:您的节点对象实际上是空的。如果node.parentNode存在且不为null,最可靠的测试方法是:

if ((typeof node==='undefined') || !node || !node.parentNode) return null;
这包括以下情况:

  • 节点
    变量不存在
  • 节点
    变量为空或未定义
  • parentNode
    是falsy(
    未定义、null、false、0、NaN或“”
根据Blue Skys的评论,您应该注意第一次检查(
typeof node===“undefined”
),因为它掩盖了未声明的变量,这可能会导致以后出现问题:

function f() {
  if (typeof node==='undefined') {
     node = {}; // global variable node, usually not what you want
  }
}

如果
节点
变量不存在,则应允许该错误,以便正确声明该错误。原因是如果它没有被声明,并且在其他地方有赋值,它将创建一个隐式全局变量。因此,最好获取ReferenceError,以便您可以修复它,而不是使用
typeof
隐藏它。@blueskies