首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我不能在函数的参数上调用数组方法?

为什么我不能在函数的参数上调用数组方法?
EN

Stack Overflow用户
提问于 2009-09-15 01:41:34
回答 8查看 49.5K关注 0票数 24

我有一个函数可以接受任意数量的参数...

代码语言:javascript
复制
const getSearchFields = () => {        
    const joined = arguments.join('/'); 
};

我想要一个包含传递给函数的所有参数的字符串,并使用/字符连接。我一直收到这个错误:

args.join不是一个函数

有人能告诉我我哪里做错了吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-09-15 01:44:42

arguments是一个伪数组,而不是真正的数组。join方法可用于数组。

你需要作弊:

代码语言:javascript
复制
var convertedArray = [];

for(var i = 0; i < arguments.length; ++i)
{
 convertedArray.push(arguments[i]);
}

var argsString = convertedArray.join('/');

与其他帖子类似,您可以速记执行以下操作:

代码语言:javascript
复制
var argsString = Array.prototype.join.call(arguments, "/");
票数 48
EN

Stack Overflow用户

发布于 2009-09-15 01:47:34

如上所述,arguments对象并不是真正的数组,但是您可以通过访问Array.prototype并使用applycall执行它们来更改上下文,从而直接应用数组函数:

代码语言:javascript
复制
var argsString = Array.prototype.join.call(arguments, '/');

编辑:由于大约9年前提出的原始问题被更新为使用ES6语法,我觉得现在有必要提供ES6答案,因为该语言提供了本机构造来处理这种情况。

ES6标准引入了扩展运算符,您可以很容易地使用该运算符将参数作为数组对象接收,例如:

代码语言:javascript
复制
function sum(...numbers) {
  return numbers.reduce((sum, value) => sum + value);
}

console.log(sum(1,2,3,4)); // 10

适用于您的示例:

代码语言:javascript
复制
const getSearchFields = (...fields) => {        
  const joined = fields.join('/'); 
};

您还可以使用扩展运算符来执行函数调用,假设您有一个数组,并且您想调用一个函数,将该数组的每个元素作为函数调用的参数传递,现在您可以简单地:

代码语言:javascript
复制
function sum(a, b, c, d) {
  return a + b + c + d;
}

var array = [1, 2, 3, 4];
console.log(sum(...array)); // 10

您还可以期待一些参数,并将其余参数作为定义的最后一个参数传递:

代码语言:javascript
复制
function processList(first, ...rest) {
  // ...
}

还有更多的扩展运算符的用法超出了这个问题的范围,例如对象复制,在数组中扩展数组,等等。

票数 14
EN

Stack Overflow用户

发布于 2014-03-04 03:46:32

如果您使用的是jQuery 1.2+,则可以使用$.makeArray()

将类似数组的对象转换为真正的JavaScript数组。

从问题中的示例中,只需使用下面这行

代码语言:javascript
复制
var args = $.makeArray(arguments);
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1424710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档