如果你定义一个这样的变量:
var defined;
它没有任何价值,但您不会收到 ReferenceError,因为该引用存在。它只是没有引用任何东西。因此,以下是有效的。
if (defined != null) { ... }
在一个函数的情况下,比如这个
function doSomethingWithDefined(defined) {
if (defined != null) { ... }
}
它可以翻译成:
function doSomethingWithDefined() {
var defined = arguments[0];
if (defined != null) { ... }
}
因为变量是隐式声明的(但不一定是定义的),你可以这样做并且不会出现异常,所以不需要typeof
.
doSomethingWithDefined("value"); // passes defined != null
doSomethingWithDefined(); // defined == null, but no exception is thrown
当您不确定变量是否已声明时,通常使用 typeof 运算符。但是,还有一种适用于所有现实世界场景的替代方案。
if (window.myvariable != null) {
// do something
}
因为全局变量是您唯一应该关注的非参数变量,所以使用属性访问我们也可以避免异常。
也就是说,我强烈建议进行类型检查,而不是避免类型。要乐观!
它是一个字符串吗?
if (typeof declared === "string"){ ... }
它是一个数组吗?
if (typeof declared === "object" && declared.length != null){ ... }
它是非数组对象吗?
if (typeof declared === "object" && declared.length == null){ ... }
它是一个函数吗?
if (typeof declared === "function"){ ... }