我遇到过这段代码:
return someFunctionThatReturnsAnArray()
.map((action) => void dispatch(action))
.run();
有人可以建议您为什么在地图函数中添加void
前缀,以便每次都返回undefined
吗?
答案 0 :(得分:2)
这实际上是一种定义返回undefined
的函数的聪明方法。
来自MDN:
void运算符计算给定的表达式,然后返回undefined。
您的代码基本上与以下内容相同:
return someFunctionThatReturnsAnArray()
.map((action) => { dispatch(action); })
.run();
我会说实话:如果我在与我合作的任何项目中遇到过该代码,我会将其标记为待审核。它并没有真正意义,而且可能令人困惑。
答案 1 :(得分:0)
void
运算符允许计算生成值的表达式 到表达式为undefined的表达式 期望的。
所以看起来像:
dispatch
方法,其返回值就不重要了map
方法的结果是一个值为undefined
的数组,但其长度等于已分派的调用数run
方法不是数组原型的标准(似乎是自定义补丁),因此很难说它的作用。其中一个用法是调度调用的信息
Array.prototype.run = function() {
console.log("Dispatched calls : " + this.length);
};
var getArray = function() {
return ['1', '2', '3'];
}
var dispatch = function(n) {
return 10*n;
}
getArray().map((action) => void dispatch(action)).run();

答案 2 :(得分:0)
取自https://eslint.org/docs/rules/no-void
void运算符接受一个操作数并返回undefined:void 表达式将计算表达式并返回undefined。有可能 用来忽略表达可能产生的任何副作用:
使用void运算符的常见情况是获得“纯”未定义 在ES5之前的值,未定义的变量是可变的:
// will always return undefined (function(){ return void 0; })(); // will return 1 in ES3 and undefined in ES5+ (function(){ undefined = 1; return undefined; })(); // will throw TypeError in ES5+ (function(){ 'use strict'; undefined = 1; })();
另一个常见的情况是缩小代码,因为void 0小于 未定义:
foo = void 0; foo = undefined;
当与IIFE(立即调用的函数表达式)一起使用时,无效 可以用来逼迫
将function关键字视为表达式而不是a 声明:
var foo = 1; void function(){ foo = 1; }() // will assign foo a value of 1 +function(){ foo = 1; }() // same as above function(){ foo = 1; }() // will throw SyntaxError
某些代码样式禁止void运算符,将其标记为非显而易见的 难以阅读。
看不出有任何理由在您提供的代码段中使用它。