void
是一个不常用的运算符。void
运算符的作用是执行一个表达式,然后不返回任何值,或者说返回undefined
。
var x = 3;
void (x = 5) //undefined
x // 5
void
运算符的优先性很高- 建议使用
void
时要加上圆括号,如果不使用括号,容易造成错误的结果 - 比如,
void 4 + 7
实际上等同于(void 4) + 7
- 建议使用
void 0 // undefined
void(0) // undefined
上面是void
运算符的两种写法,都正确。因为 void
运算符的优先性很高,因此建议使用 void
时,总是使用圆括号。
void
可以用来获取真正的undefined
。
const undefined = 1
const x1 = undefined
const x2 = void(0)
console.log(x1) // 1
console.log(x2) // undefined
由于 undefined
可以被重新定义,使用 void 0
是获取真正的 undefined
值的常见方法
- 可以在超链接
<a>
中使用void
来阻止页面跳转。
<script>
function f() {
console.log('Hello World');
}
</script>
<a href="http://example.com" onclick="f(); return false;">Click Me!</a>
上面代码中,点击链接后,会先执行onclick
的代码,由于onclick
返回false
,所以浏览器不会跳转到 example.com。
void
运算符可以取代上面的写法:
<a href="javascript: void(f())">Click Me!</a>
下面是一个更实际的例子,用户点击链接提交表单,但是不产生页面跳转。
<a href="javascript: void(document.form.submit())">
提交
</a>
如果在点击连接后,只需要实现阻止链接跳转的功能,而不需要执行其它任何操作,还可以进一步简化:
<a href="javascript:void(0)">Click Me!</a>
javascript:void(0)
- 表示链接被点击时执行 js,但不进行任何实际的操作(即返回
undefined
,所以页面不会跳转到新的 URL)。 - 这种写法是一个长期以来的公认做法,开发者更熟悉这种写法。使用其他的值可能会让其他开发者感到困惑,大家都默认使用 0 就好。
- 从语义的角度看,
void(0)
更清晰地表示“我想执行一个没有实际效果的操作”。
void
可用于 IIFE(立即调用的函数表达式)。
void function() {
// ...
}();
- 使用
void
可以丢弃函数的返回值。
function example() {
return void someOtherFunction();
}
如果你有一个函数,它可能有一个返回值,但在某些情况下你不想返回这个值,你可以使用 void