我理解你为什么要在javascript中测试null和undefined:
var declared;
...
if ('undefined' !== typeof declared && null !== declared) {
// do something with declared
}
或
function doSomethingWithDefined(defined) {
if ('undefined' !== typeof declared && null !== declared) {
// do something with declared
}
}
有没有办法缩短这个陈述?这是非常冗长的模式。
答案 0 :(得分:3)
如果你定义一个这样的变量:
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"){ ... }