如何在不获得引用错误的情况下将不存在的JavaScript对象与未定义的对象进行比较
How can I compare a non-existing JavaScript object to undefined without getting a Reference Error?
我想从这个表达式中提取布尔值
(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
希望这个练习能帮助你理解这种比较的原因。
相关文章:
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值