在日常开发中,如果需要检测一个两是否存在的话,可以参考下面的demo:
var a = 123;
if (typeof a === "undefined") {
console.log("a is undefined");
}else {
console.log(a); // 123
}
这样就避免了如果变量a未进行声明的情况下的一个报错,如果前面没有定义变量a,输出的结果是这样的:
**错误做法:
var a = 123;
// 检测变量c是否已经定义
if (!!c) {
console.log("ccc");
}
这样会直接报错:c is not defined
因为c根本没有声明,更没有定义。
再来看一个dmeo:
var a = 123;
if (typeof c === "undefined") {
console.log("c is undefined");
}else {
console.log(c); // 代码不会执行到这里来
}
这个demo会输出c is undefined,因为c没有声明也没有定义。但是为什么不会像上一个demo一样抛出一个错误呢?原因是因为type这个一元操作符有特殊的安全防范机制。可以来看看typeof对不同数据的操作是什么样的结果:
console.log(typeof undefined); // undefined
console.log(typeof null); // object
console.log(typeof 123); // number
console.log(typeof "字符串"); // string
console.log(typeof {}); // object
console.log(typeof aa); // undefined
从上面这个demo来看,typeof对undefined和未声明的变量返回的都是undefined,所以刚才上面那个例子中,typeof c 不会进行报错,就是因为它返回了一个字符串类型的undefined。
还有一个方法也是可以检测变量是否存在的,那就是使用全局变量window。在js中,所有全局变量都是window的属性,所以当我们要知道这个变量是否存在的时候,直接使用.的方式来访问这个变量即可。如下:
var a = 123;
console.log(window.a); // 123
console.log(window.b); // undefined