如何在不获得引用错误的情况下将不存在的JavaScript对象与未定义的对象进行比较

How can I compare a non-existing JavaScript object to undefined without getting a Reference Error?

本文关键字:对象 JavaScript 不存在 未定义 比较 情况下 错误 引用      更新时间:2023-09-26

我想从这个表达式中提取布尔值

(task === undefined);

其中CCD_ 1是任意的并且根本不出现在代码中。

然而,当我在rhino中运行这个时,我会得到一个参考错误。我想要真正的

为什么我不明白呢?

我想检查是否已经定义了一个特定的变量。如果这不起作用,我该怎么做?

使用此:

(typeof task === "undefined")

当您使用(task === undefined)时,Javascript需要查找task的值,以查看它是否与undefined相同,但它无法查找名称,因为它不存在,从而导致引用错误。typeof的特殊之处在于它可以安全地返回不存在的名称的类型。

附录以了解为什么它不起作用,您可以在javascript控制台中尝试一些示例。

只有当变量存在时,才可以直接与未定义的类型进行比较。以下是您将从Google Chrome浏览器获得的输出:

> task === undefined
  ReferenceError: task is not defined

但是,如果变量存在,它将起作用:

// continued from above
> var task
  undefined
> task === undefined
  true

这就是为什么应该使用typeof解决方案的原因,因为它可以在所有情况下工作,而不会引发错误(并中断javascript代码的执行)。

// continued from above
> typeof notavariable === 'undefined'
  true
> typeof task === 'undefined'
  true

请注意,在某些情况下不需要typeof检查,例如对象文字中的属性:

// continued from above
> var obj = {}
  undefined
> obj.test === undefined
  true
> obj.test = 1
  1
> obj.test === undefined
  false

这是因为对象中的属性表现得更像关联数组中的值:

// continued from above
> obj["test"]
  1
> obj["test"] === undefined
  false

然而,你不能总是确定这是在一个函数中,你不能控制参数输入的情况:

// continued from above
> function TestFunc(arg1) { console.log(arg1) }
  undefined
> TestFunc(notavariable)
  ReferenceError: notavariable is not defined
> TestFunc(task)
  undefined
  undefined
> TestFunc(obj["lol"])
  undefined
  undefined

希望这个练习能帮助你理解这种比较的原因。