return void 0; vs return;

时间:2013-10-18 15:53:54

标签: javascript underscore.js

我正在研究Underscore.js的注释源代码。

http://underscorejs.org/docs/underscore.html#section-41

这是_.first方法:

  _.first = _.head = _.take = function(array, n, guard) {
    if (array == null) return void 0;
    return (n == null) || guard ? array[0] : slice.call(array, 0, n);
  };

问题:

为什么'返回void 0;'而不仅仅是'回归' ?据我所知 return 隐式返回函数的undefined(值!)。就像'return void 0'那样。

1 个答案:

答案 0 :(得分:6)

MDN reference for the void operator中声明:

  

void运算符通常仅用于获取未定义的运算符   原始值,通常使用“void(0)”(相当于“void”   0“)。在这些情况下,可以使用未定义的全局变量   (假设它尚未分配给非默认值)。

所以它确实等同于undefined,但undefined变量的问题在于它可以重新定义为其他东西。就个人而言,我总是只是return;因为它始终产生完全相同的结果(如:(function() {})() === void 0)。

澄清

由于一些评论者认为这不是一个合适的答案:

(function() {})() === void 0总是产生true,这意味着它与return;完全相同。所以你可以认为这是Underscore库中的一个不一致,因为在其他地方使用了普通的return语句(是的,即使它可能发生)。

缩小和优化

另一个附录,看起来好像它在缩小时也没有更好地优化。使用closure compiler上述代码示例的return void 0; vs return;版本仍然大约增加5%。