How to compare variables to undefined, if I don’t know whether they exist?
在javascript中,你可以声明一个变量,如果它是undefined,你可以检查variable == undefined;我知道,但是你如何比较一个你还不知道的值,如果它在内存中呢?
例如,我有一个类,它是在用户单击按钮时创建的。在此之前,类是未定义的?-?它不存在于任何地方;我如何比较它?
有没有办法不使用try–catch?
最好的方法是检查类型,因为在JS中,undefined/null/false是一个棘手的问题。所以:
1 2 3
| if(typeof obj !=="undefined") {
// obj is a valid variable, do something here.
} |
注意,typeof总是返回一个字符串,如果变量根本不存在,则不会生成错误。
- 使它完美(注意第二等号)
- 什么是技巧?为什么不直接比较一下提米的答案呢?
- 你现在就可以使用obj !== undefined。undefined过去是可变的,就像undefined = 1234一样,什么会引起有趣的结果。但是在ecmascript 5之后,它不再是可写的,所以我们可以使用更简单的版本。codereadability.com/how-to-check-for-undefined-in-javascript
- 注意,obj可能是null或false,在这种情况下,我猜您也不想执行这种代码。当然也有例外和特殊情况。null、false、undefined都是"不可靠"的值,可以很容易地这样评价:if (obj) { ... }。
- @amypellegrini我上面的例子仍然有效,因为typeof不会触发错误,即使变量为空或假。这就是它的美。
- @Makramsaleh不会引发错误,但如果obj === null或obj === false,它将通过"真"评估。当然,只是一个警告,if中的上下文和内容将决定代码是否失败。
- @Raveren不需要类型强制比较,两边都已经是字符串,类型推断不会发生。
- 太棒了,伙计,摇滚乐
- "let options=null undefined>typeof options""object""如果值为空,则出现问题。"
1 2 3 4
| if (obj === undefined)
{
// Create obj
} |
如果你正在做大量的javascript编程,你应该养成使用==和的习惯!==要进行类型特定检查时。
另外,如果您要做大量的javascript,我建议您首先通过jslint http://www.jslint.com运行代码,这可能看起来有点苛刻,但jslint警告您的大多数事情最终会回来咬您。
- +1用于使用jslint并直接与未定义进行比较
- 还有JShint
- 什么情况下,一个不是undefined的东西会不会是== undefined?
- @Jessedhillon-"空=未定义"为真。空==未定义"不是。
- 请使用typeof var === 'undefined',因为undefined在javascript中不是常量。
- 不起作用,马克拉姆的typeof解决方案起作用。
- 需要使用typeof。
- 由于ECMA脚本5(2009),"未定义"是一个常量,不需要使用typeof。这应该是公认的答案。
- 我做错什么了吗?imgur.com/a/uywdkd8
- @samybencherif尽管命名混乱,但undefined与试图引用尚未定义的变量不同。
1
| if (document.getElementById('theElement')) // do whatever after this |
对于引发错误的未定义事物,测试父对象的属性名而不仅仅是变量名-因此而不是:
做:
在javascript中,!undefined是正确的,因此,如果您想知道变量或对象是未定义的,并且想采取行动,可以这样做:
1 2 3 4 5
| if(<object or variable>) {
//take actions if object is not undefined
} else {
//take actions if object is undefined
} |
- 谢谢你的时间,但是,如果你试图比较一个未声明的变量,你会得到一个错误抛出,说你没有声明变量…所以无法比较…因此,您需要以字符串格式转换变量的类型,以便成功地比较它。例如if(myUndeclaredValue的类型="Undefined")//do something best nahum@rahul panday
- 你已经编辑了最后一个很酷,以前从未见过,谢谢:)
1 2 3 4
| if (!obj) {
// object (not class!) doesn't exist yet
}
else ... |
- obj可能非常存在,但可能是假的或0。
- 规则对象不能只是false或0。它应该包含成对的key -> value,或者为空,或者未定义,或者为空。
- 但这不是问题所在。仅仅因为你调用一个变量obj,它可能仍然是任何imho。
- 'I have a class which is created when the user clicks a button. Before this the class is undefined, it doesn't exist anywhere so how can I compare it?—这是个问题。