JavaScript检查变量是否存在(已定义/初始化)
检查变量是否已被初始化的哪种方法更好/更正? (假设变量可以容纳任何东西(string,int,object,function等))
if (elem) { // or !elem
要么
if (typeof(elem) !== 'undefined') {
要么
if (elem != null) {
你想要typeof
运算符。 特别:
if (typeof variable !== 'undefined') {
// the variable is defined
}
typeof
运算符将检查变量是否真的未定义。
if (typeof variable === 'undefined') {
// variable is undefined
}
与其他运算符不同, typeof
运算符与未声明的变量一起使用时不会引发ReferenceError异常。
但是,请注意typeof null
将返回"object"
。 我们必须小心避免将变量初始化为null
的错误。 为了安全起见,我们可以使用以下代码:
if (typeof variable === 'undefined' || variable === null) {
// variable is undefined or null
}
有关使用严格比较===
而不是简单等式==
更多信息,请参阅:
应该在JavaScript比较中使用哪个等于运算符(== vs ===)?
在JavaScript中,可以定义变量,但将值保留为undefined
,因此最常见的答案在技术上不正确,而是执行以下操作:
if (typeof v === "undefined") {
// no variable "v" is defined in the current scope
// *or* some variable v exists and has been assigned the value undefined
} else {
// some variable (global or local) "v" is defined in the current scope
// *and* it contains a value other than undefined
}
这可能足以达到你的目的。 下面的测试具有更简单的语义,这使得更准确地描述你的代码的行为并且自己理解它(如果你关心这样的事情)更容易:
if ("v" in window) {
// global variable v is defined
} else {
// global variable v is not defined
}
当然,这假设你在浏览器中运行(其中window
是全局对象的名称)。 但是,如果你正在用这样的全局变量进行分析,那么你可能在浏览器中。 主观地说, 'name' in window
使用'name' in window
风格上与使用window.name
来引用全局变量一致。 将全局变量作为window
属性而不是作为变量访问,可以使代码中引用的未声明变量的数量最小化(为了linting),并避免全局被局部变量遮蔽的可能性。 另外,如果全局变形使你的皮肤爬行,你可能会感觉更舒服,只有用这根较长的棒才能触摸它们。
上一篇: JavaScript check if variable exists (is defined/initialized)