您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

void

void 运算符 对给定的表达式进行求值,然后返回 undefined。(MDN)

表达式前面如果带有 void 关键字,则表达式的结果就会被忽略,并将 undefined 作为结果。

从业务上来看,void 关键字并不常用。

当想让立即实行的时候,需要让 JavaScript 将识别为表达式,void 关键字就能起到这个作用。

void function() {
  alert('马上执行!冲冲冲!');
}();

但有局限性,如果需要到的返回值,就不能使用 void。

var num1 = ;
var num2 = ;

var result = void function(number1, number2) {
  return [number1 + number2, number1 * number2];
}(num1, num2);

result.forEach(function(res) {
  console.log(res);
});

如这个例子,返回了两数之和与两数之积的结果,但因为 void 关键字,实际 result 变量被赋值为 undefined,导致程序无法正常执行。

<a>href ,可以用来执行 JavaScript

通常可以这么写:

<a href="javascript: void;"></a>
<a href="javascript: void 0;"></a>
<a href="javascript: void (0);"></a>

这三行的是一样的。

如果 <a>hrefjavascript:表达式;,则会执行表达式的,并将的设置为表达式的结果,如果表达式的结果是 undefined,则什么都不做。

根据这个规则,void 就起到了作用,但其实不写表达式,依然能达到这个。

<a href="javascript:;"></a>

这样的和上面使用 void 关键字的方式是等价的,这也是常用的方式。

但碰到需要使用 <a> 执行的时候,void 就变得相对关键。

<script>
  function log(who) {
    console.log('点击了:' + who);

    return who;
  }
</script>

<a href="javascript: log('add');"></a>
<a href="javascript: log('update');"></a>
<a href="javascript: log('delete');"></a>

这种情况如果不加 void,就会发生改变,因为 log 存在非 undefined 的返回值。

<script>
  function log(who) {
    console.log('点击了:' + who);

    return who;
  }
</script>

<a href="javascript: void log('add');"></a>
<a href="javascript: void log('update');"></a>
<a href="javascript: void log('delete');"></a>

void 一样,结果就符合预期了,具体的、操作,再通过绑定对应的事件来实现。

void 的使用场景有限,但在某些情况下可以提高的健壮性,如明确不需要结果的场景下, void 关键字,这样可以避免未来表达式结果的改变带来的问题。


联系我
置顶