目录
概述
undefined:表示未定义。
在编码中使用某一个变量或者函数之前有时会判断是否已经定义了,并且不是空然后再做处理。这个时候会使用比如:
1 | if(a !== undefined && a! == null){ |
一般来讲是没有问题的,但如果经常阅读开源源码会发现,如下写法:
1 | if(a !== void 0 && a! == null){ |
两种写法目的是一样的。
不使用undefined原因
上面提到两种写法,为什么建议用void 0 ?
主要原因是javascript在设计的时候undefined并不是一个关键字,也就是说如下代码是合理的不会报错:1
2var undefined = 100;
console.log(undefined)
不同的浏览器运行的结果不太相同,在chrome中仍然输出undifined,但是在比较老的IE中会输出100;
ES5之后undefined已经是一个只读属性,所以上述输出不同浏览器基本都是undefined。但是在局部作用域中undefined会被修改:1
2
3
4(function() {
var undefined = 100;
console.log(undefined);
})();
结果:输出100
使用void原因
void是javascript中的一个操作符,有两种写法
- void exp
- void(exp)
void:计算一个表达式但无论该表达式原来是否有自己的返回值,其返回值都为undefined
- 作用一:返回undefined,解决上面提到的undefined会被重新定义的问题
- 作用二:防止不必要的行为。比如a标签中我们有一种写法
1
<a href="javascript:void(0)"></a>
因为void是关键字所以可以放心的用。为什么是void 0内,其实后面跟什么都会返回undefined,只是最简单的就是0这个字符,其实void 1,void 2,void(“hello”) 都可以。void 0可以做到占用字节数最少。
其他一些替代写法
1 | //取整 |