JavaScript的虚拟运算符的实际用例是什么?

时间:2017-06-05 06:16:37

标签: javascript void

为什么会有人写:

function () {
    if (err) {
        return void console.log(err)
    }
}

而不是:

function () {
    if (err) {
        console.log(err)
        return
    }
}

有没有人使用void运营商?我已经看到它在上面的示例中使用,但非常非常少。

更新

console.log可能是一个糟糕的例子,因为它本身会返回void。让我展示一下我在express应用中看到的另一种用法:

function (req, res) {
    ...
    // Some error occurred
    if (err) {
        return void res.send(foo)
        // `send` returns a `Response` instance
    }
}

例如,在eslint的源代码中,它被大量使用:

  

config-initializer.js

     

jshint.js - BIG FILE WARNING!

     

consistent-return.js

2 个答案:

答案 0 :(得分:1)

上述两个函数正在做同样的事情,除了前者写成一行。 void最常用于超链接的内容,浏览器可能会解释返回的结果并尝试显示结果。

在更新的代码中,空白很重要,因为该函数的作者想要在一行中执行以下操作。

  1. 执行res.send(foo)
  2. return void(nothing)
  3. 因此他/她使用void 结果转换为未定义的

答案 1 :(得分:1)

一个用例是当undefined本身没有做同样的事情时总是返回undefined。在大多数现代浏览器中,window.undefined不可写,但可以被镜像为有效的变量名。好吧,我不会说它是一个真实的情况,但是回归undefined是一种万无一失的方式。



function whendefined(){
    var undefined = 'defined';
    return undefined;
}

console.log(whendefined());

function neverdefined(){
    var undefined = 'defined';
    return void 0;
}

console.log(neverdefined());




MDN community docs也有相同的内容

  

此运算符允许插入产生副作用的表达式   到表达式为undefined的表达式   期望。   void运算符通常仅用于获取未定义的运算符   原始值,通常使用" void(0)" (相当于"无效   0&#34)。在这些情况下,可以使用未定义的全局变量   (假设它尚未分配给非默认值)。

es-lint示例中的使用可能只考虑文件大小,因为它们不会以任何方式缩小。

"undefined".length; //9
"void 0".length;//6

10,000次下载可以节省~30,000个字节。

Consistent Return与此直接无关,它只是确保显式且一致地指定返回值。在整个代码中,使用void 0的考虑因素似乎是文件大小的考虑因素,而可能某些旧样式编码的作者从旧浏览器中继承而来{{1}可以被覆盖。