【对于《JS高级程序设计》的理解】数组
“即便未初始化的变量会自动被赋值undefined值,但显式地初始化变量依然是明智的选择。若是可以作到这一点,那么当typeof操做符返回‘undefined’值时,咱们就知道被检测的变量尚未被声明,而不是还没有初始化。”spa
以前一直对这段话不理解,不知道说的究竟是什么意思;今天从新回到这里,思考这段话,仔细想了一下;设计
‘显式地初始化变量依然是明智的选择’这段话是歧义的根源,以前被我理解为,显示地初始化为undefined,这样作致使后面说的就不成立,不管是声明不声明结果仍是同样的,由于默认undefined;code
而从新理解,应该是:初始化为一个非undefined的值,这样就成立了;能够用空的占位符,如:对象
意思就是,使用变量的时候,要对变量进行初始化一个非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的不一样点】