哪种检查变量是否已初始化的方法更好/正确?(假设变量可以保存任何东西(字符串、整数、对象、函数等))
if (elem) { // or !elem
或者
if (typeof elem !== 'undefined') {
或者
if (elem != null) {
哪种检查变量是否已初始化的方法更好/正确?(假设变量可以保存任何东西(字符串、整数、对象、函数等))
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 ===)?
在许多情况下,使用:
if (elem) { // or !elem
将为您完成工作!...这将检查以下情况:
undefined
''
所以它将涵盖所有情况,但总有一些奇怪的情况我们也想涵盖,例如,一个带有空格的字符串,就像这个' '
,这将在 javascript 中定义,因为它在字符串中有空格...例如,在这种情况下,您使用 trim() 再添加一项检查,例如:
if(elem) {
if(typeof elem === 'string' && elem.trim()) {
///
此外,这些检查仅针对值,因为对象和数组在 Javascript 中的工作方式不同,空数组[]
和空对象{}
始终为true。
我创建了下面的图像以显示答案的简要说明:
在 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
是全局对象的名称)。但是,如果您像这样处理全局变量,则可能是在浏览器中。主观上, using'name' in window
在风格上与 usingwindow.name
指代全局变量一致。将全局变量作为属性window
而不是变量访问允许您最大限度地减少在代码中引用的未声明变量的数量(为了 linting),并避免全局变量被局部变量遮蔽的可能性。此外,如果全局变量让你的皮肤爬行,你可能会觉得只用这个相对较长的棒触摸它们会更舒服。
在大多数情况下,您会使用:
elem != null
与简单的 不同if (elem)
,它允许0
、false
、NaN
和''
,但拒绝null
或undefined
,使其成为一个很好的通用测试,用于检验是否存在参数或对象的属性。
其他检查也没有错误,它们只是有不同的用途:
if (elem)
:如果可以被用于elem
保证是一个对象,或者如果false
,0
等被认为是“默认”值(因此等同于undefined
或null
)。
typeof elem == 'undefined'
可用于指定null
对未初始化的变量或属性具有不同含义的情况。
elem
var
window
同样有用的是与 的严格比较undefined
:
if (elem === undefined) ...
但是,因为全局undefined
可以被另一个值覆盖,所以最好undefined
在使用它之前在当前作用域中声明该变量:
var undefined; // really undefined
if (elem === undefined) ...
或者:
(function (undefined) {
if (elem === undefined) ...
})();
这种方法的第二个优点是 JS 压缩器可以将undefined
变量减少到单个字符,每次为您节省几个字节。