80

是否有任何标准方法可以在 JavaScript 中将函数参数标记为未使用,类似于在 Ruby 中使用下划线开始方法参数?

4

5 回答 5

58

就这样我们有一个例子可以工作,这在 jQuery$.each中很常见,您在其中编写不需要索引的代码,只需要值,在迭代回调中($.each相对于 向后Array#forEach):

$.each(objectOrArrayLikeThing, function(_, value) { }
    // Use value here
});

Using_是我见过的最接近标准的方法,是的,但我也见过很多其他方法——给它一个反映其目的的名称(index),调用它unused等。

如果您需要忽略多个参数,则不能重复相同的标识符(在严格模式下是不允许的,这应该是每个人的默认值,并且是模块和class构造中的默认值),因此您可以执行_0and_1_and之类的操作__,等等

于 2015-08-25T07:31:05.537 回答
37

使用解构赋值,可以做到:

function f(...[, , third]) {
  console.log(third);
}

f(1, 2, 3);

于 2019-11-06T20:46:16.383 回答
26

使用支持解构的浏览器可以:

function ({}, {}, value) {
  // console.log(value)
}

这很简洁,因为它避免了多个参数具有相同名称的问题,并且也不会对分配方法的库产生问题_(lodash,下划线等)。

这种方法的一个问题是未使用的类型undefined或参数null将抛出。

一种解决方案是使用undefined默认参数:

function ({}={}, {}={}, value) {
  // console.log(value)
}

遗憾的是,没有这样容易应用的解决方案null

于 2016-06-03T12:11:37.363 回答
11

我会推荐这种语法:

function(_index, value) {...}

不要隐藏 lodash 变量,并且仍然有参数的描述,以防万一它被使用。

VS Code 也会正确突出显示这些名称,并且这些未使用的参数在自动修复代码气味后不会被删除

于 2019-05-16T09:02:16.293 回答
0

使用function arguments对象怎么样?

function third() { const [,,thirdArg] = arguments;
  return thirdArg;
}
console.log(third(1,2,3));

于 2019-06-20T16:30:16.127 回答