这是Javascript中的一个非常小的问题,这里单独拿出来讲,是对我自己在使用中的一个强化,因为我自己就经常搞错。到底是undefined还是"undefined"呢?
首先,我们要搞明白什么是undefined。这里有一篇文章,详细的阐述了undefined的由来(和null有关),并且说明了一些使用undefined的情况。
中文翻译过来,undefined就是“没定义”,这种语境也非常容易理解:本来应该有的,结果要用的时候却没有,不管是你故意漏掉了还是不小心忘记了,总之它原本应该被定义好的,结果却没有定义好。打个比喻就是,我想用一把钳子,打开装钳子的盒子,结果却没要找到钳子,本来应该有的,我现在要用,却没找到!
在使用中是什么情况呢?
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
第一种,比如:
var num 5 + num // NaN
上面这个情况我们是很少出现的,如果出现了,就会得到NaN的结果,这是因为这个时候num=undefined,undefined不能和数字相加。
第二种情况,比如:
function get(param) { return param } var value = get()
这里在使用的时候,我们没有给get()函数传递参数,而Javascript中不像php中一样,可以在声明时声明为get(parm = 6),给一个初始值,Javascript这个初始值是无效的(ES6已经支持这种初始赋值,而且初始值可以是已经定义好的变量),所以,要设定初始值的处理办法是如下:
function get(parm) { if(parm === undefined) { parm = 6 } }
这里你就可以非常明白的看到,当没有赋予变量时,该参数为undefined。
第三种情况,比如:
var obj = {} var obj_id = obj.id
这个时候,obj.id=undefined。
第四种情况,比如:
var value = 5 function get(num) { value += num } var a = get(2)
这个时候你就会发现,a=undefined,而value=7,这是因为function没有设置返回值,默认返回undefined。
关于undefined的条件判断
当直接使用变量进行全等判断时使用undefined,使用typeof判断时,使用"undefined":
var a if (a === undefined) { // 能做这样的判断,前提是a已经声明过了,如果a没有声明过,那么会报错 } if (typeof a === "undefined") { // a可以未经声明 } if (a == undefined) { // a须经声明 // a=0时,也成立 }
所以,下次你在进行判断的时候,不要犯同样的错误。
2015-05-08 4475