How can I determine if a JavaScript variable is defined in a page?
如果在页面中定义了变量,如何签入javascript?假设我想检查一个页面中是否定义了一个名为"x"的变量,如果我执行if(x != null),它会给我一个错误。
我用if (typeof(x) !="undefined")工作
- 您正在检查x是否为字符串,而不是x是否未定义。
- 乔纳森,你确定吗?JohnResig在他的javascript教程中使用了这种精确的方法:ejohn.org/apps/learn/11您可以在页面上运行脚本并亲自查看。
- 我刚在Firebug中检查过,Undefined映射到字符串"Undefined",有人在写JS时严重吸烟,我接受了纠正。
- @本:字符串"undefined"更正确——如果使用!==,则需要引号,因为typeof会产生字符串。
- @Benbederson@Benalpert,另外,可以覆盖undefined!使用字符串。
- @德里克,哇,我刚刚学到了一些东西。似乎他们已经开始在最近的浏览器中修复它了,至少,所以希望这是我十年后可以再次忘记的事情。
为了避免意外分配,我习惯于颠倒条件表达式的顺序:
1
| if ('undefined' !== typeof x) { |
- 嘿,我也颠倒了顺序!我不记得从哪里学来的…
- 您要使用!==,而不是===。:)
- 细节,细节!;-)
- 我讨厌逆向作业。
- 尤达条件
- .句子完全相反的英语
- 不可否认,这是更好的方法,但它的笨拙让我很烦(而且它经常与其他人的代码不一致)。我希望它是错误的。
与其他运算符不同,typeof运算符在与未声明的符号一起使用时不会引发引用错误异常,因此可以安全地使用…
1 2 3
| if (typeof a !="undefined") {
a();
} |
正如其他人所提到的,EDCOX1×1运算符可以对未声明的标识符进行评估,而不会引发错误。
1
| alert (typeof sdgfsdgsd); |
将显示"未定义",其中
将引发引用错误。
您可以通过以下方式完成:
如果(Window!x)!{=未定义的){//你在这里编码}
- 这与全局范围中的"变量"一起工作,只是因为它们实际上是"窗口"对象的属性。使用"VAR"语句声明的变量将不会以这种方式被测试。在这里:AHEDGE ES/84
- 此外,假设全局对象是窗口,通常是(?)浏览器中的情况,但在其他环境中不一定是正确的。
假设您的函数或变量是在典型的"全局"(请参见:窗口)范围内定义的,那么我更喜欢:
1 2 3
| if (window.a != null) {
a();
} |
如果您正在检查函数的存在,甚至是以下内容:
尝试使用未定义
这是检查特定浏览器功能的方式。
- 你确定准确的语法行得通吗,尼克?对我来说这是一个错误,x是未定义的。
- 这是怎么得到4票的?它做的几乎和OP做的一样错误。
- 这方面的问题是,未定义可以重新定义,所以只有在您确定范围内不是这样的情况下才使用它。
- @如其他人所指出的那样,另一个问题是它假设x被声明。尝试将"x==undefined"粘贴到JS控制台中,会得到一个引用错误。