undefined详解

【对于《JS高级程序设计》的理解】数组

“即便未初始化的变量会自动被赋值undefined值,但显式地初始化变量依然是明智的选择。若是可以作到这一点,那么当typeof操做符返回‘undefined’值时,咱们就知道被检测的变量尚未被声明,而不是还没有初始化。”spa

以前一直对这段话不理解,不知道说的究竟是什么意思;今天从新回到这里,思考这段话,仔细想了一下;设计

显式地初始化变量依然是明智的选择’这段话是歧义的根源,以前被我理解为,显示地初始化为undefined,这样作致使后面说的就不成立,不管是声明不声明结果仍是同样的,由于默认undefined;code

而从新理解,应该是:初始化为一个非undefined的值,这样就成立了;能够用空的占位符,如:对象

  1. String类型:var str = '';
  2. Number类型:var num = 0;
  3. Boolean类型:var boo = true/false;
  4. Object类型:var obj = {};
  5. 数组:var arr = [];

意思就是,使用变量的时候,要对变量进行初始化一个非undefined的值,这样后面咱们在用typeof进行检测,只要返回undefined就认为是未声明的变量是成立的blog

【严格相等和undefined】console

var name;

if(name === undefined){
 //执行语句
}else{
 //不执行的语句
}

注意:这里必须使用严格相等操做符(===)而不是标准相等操做符(==),由于undefined==null,也就是name == undefined会检测name是否是null,可是严格相等不会检查。程序设计

【Void操做符和undefined】class

console.log(void(0));//undefined
console.log(void 0);//undefined

因此:变量

if(x === void 0) {
    // 执行这些语句
}
// 没有声明y
if(y === void 0) {
    // 抛出一个RenferenceError错误(与`typeof`相比)
}

理解:能够直接把void 0当成undefined看待

【undefined和null的不一样点】

  1. null是一个字面量(不是属性),undefined是全局对象的一个属性
  2. typeof null; //object
  3. typeof undefined; //undefined
  4. null === undefined; // false
  5. null == undefined; // true
  6. isNaN(1 + null); //false
  7. isNaN(1 + undefined); //true
相关文章
相关标签/搜索