写在前面

简单来说,void运算符用于对给定的表达式进行求值,然后返回 undefined。该运算符通常用于避免输出不应该输出的值。

常用语法

1
void expression

官方定义

这个运算符能向期望一个表达式的值是undefined的地方插入会产生副作用的表达式。

void 运算符通常只用于获取 undefined的原始值,一般使用void(0)(等同于void 0)。在上述情况中,也可以使用全局变量undefined 来代替(假定其仍是默认值)。

常见用法

通过采用void 0undefined比直接写undefined更靠谱更安全,应该优先采用void 0这种方式;

填充<a>href确保点击时不会产生页面跳转;填充<image>src,确保不会向服务器发出垃圾请求;

简单介绍

在ES5之前,window下的undefined是可以被重写的,于是导致了某些极端情况下使用undefined会出现一定的差错。所以,用void 0是为了防止undefined被重写而出现判断不准确的情况。 ES5之后的标准中,规定了全局变量下的undefined值为只读,不可改写的,但是局部变量中依然可以对之进行改写。

非严格模式下,undefined是可以重写的,严格模式则不能重写。

除了防止被重写外,还可以减少字节。void 0代替undefined省3个字节。类似的还有很多常用的写法,下面介绍一些老司机的套路,嘿嘿。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 取整
parseInt(a,10); // Before
Math.floor(a); // Before
a>>0; // Before
~~a; // After
a|0; // After

// 四舍五入
Math.round(a); // Before
a+.5|0; // After

// 内置值
undefined; // Before
void 0; // After, 快
0[0]; // After, 略慢

// 内置值
Infinity;
1/0;

// 布尔值短写法
true; // Before
!0; // After

// 布尔值短写法
false; // Before
!1; // After

// 判断奇偶数(装逼写法)
if(n&1){
console.log("n为奇数")
}else console.log("n为偶数")

// 除以2取整
Math.floor(n / 2) // Before
n >> 1 // After