Faw*_*es5 31 javascript referenceerror
我想布尔表达出这个表达式
(task === undefined);
Run Code Online (Sandbox Code Playgroud)
where task是任意的,根本不出现在代码中.
但是,当我在rhino中运行它时,我得到一个引用错误.我想要的
为什么我没有成真?
我想检查是否已定义特定变量.如果这不起作用,我该怎么办呢?
Ned*_*der 64
用这个:
(typeof task === "undefined")
Run Code Online (Sandbox Code Playgroud)
当你使用时(task === undefined),Javascript需要找到它的值,task看它是否相同undefined,但它不能查找名称,因为它不存在,给你引用错误. typeof特别之处在于它可以安全地返回不存在的名称的类型.
接受答案的附录,了解为什么它不适用于某些示例,您可以在javascript控制台中尝试自己.
直接与未定义类型进行比较仅在变量存在时才有效.以下是您从Google Chrome浏览器中获得的输出:
> task === undefined
ReferenceError: task is not defined
Run Code Online (Sandbox Code Playgroud)
但是,如果变量存在,它将起作用:
// continued from above
> var task
undefined
> task === undefined
true
Run Code Online (Sandbox Code Playgroud)
这就是你应该使用typeof解决方案的原因,因为它可以在所有情况下工作而不会抛出错误(并打破javascript代码的执行).
// continued from above
> typeof notavariable === 'undefined'
true
> typeof task === 'undefined'
true
Run Code Online (Sandbox Code Playgroud)
请注意,typeof在某些情况下您不需要检查,例如对象文字中的属性:
// continued from above
> var obj = {}
undefined
> obj.test === undefined
true
> obj.test = 1
1
> obj.test === undefined
false
Run Code Online (Sandbox Code Playgroud)
这是因为对象中的属性更像是关联数组中的值:
// continued from above
> obj["test"]
1
> obj["test"] === undefined
false
Run Code Online (Sandbox Code Playgroud)
但是,您无法始终确定这是在您无法控制参数输入的函数中的情况:
// 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
Run Code Online (Sandbox Code Playgroud)
希望这个练习可以帮助你理解这种比较的原因.
| 归档时间: |
|
| 查看次数: |
12990 次 |
| 最近记录: |