我有一个函数可以接受任意数量的参数...
const getSearchFields = () => {
const joined = arguments.join('/');
};
我想要一个字符串,其中包含函数传递的所有参数,这些参数用/
字符连接。我一直得到这个错误:
args.join不是一个函数
请问有人能告诉我我做错了什么吗?
我有一个函数可以接受任意数量的参数...
const getSearchFields = () => {
const joined = arguments.join('/');
};
我想要一个字符串,其中包含函数传递的所有参数,这些参数用/
字符连接。我一直得到这个错误:
args.join不是一个函数
请问有人能告诉我我做错了什么吗?
arguments
是伪数组,而不是真正的数组。可以使用join
方法来处理真正的数组。
你需要有所突破:
var convertedArray = [];
for(var i = 0; i < arguments.length; ++i)
{
convertedArray.push(arguments[i]);
}
var argsString = convertedArray.join('/');
与其他帖子类似,您可以使用以下方法作为简写:
var argsString = Array.prototype.join.call(arguments, "/");
var convertedArray = Array.prototype.slice.call(arguments);
- Christian C. Salvadó如上所述,arguments对象并不是真正的数组,但是您可以通过访问Array.prototype,并使用apply或call来执行它们以更改上下文,直接应用数组函数:
var argsString = Array.prototype.join.call(arguments, '/');
编辑: 由于原问题在近9年后更新了使用ES6语法,现在该语言提供了本地结构来处理这种情况,因此我感到有必要提供一个ES6答案。
ES6标准引入了扩展运算符,您可以轻松地将参数作为数组对象接收,例如:
function sum(...numbers) {
return numbers.reduce((sum, value) => sum + value);
}
console.log(sum(1,2,3,4)); // 10
const getSearchFields = (...fields) => {
const joined = fields.join('/');
};
您也可以使用展开运算符进行函数调用。假设您有一个数组,并且想要调用一个函数,将数组的每个元素作为函数调用的参数传递,现在您可以简单地执行以下操作:
function sum(a, b, c, d) {
return a + b + c + d;
}
var array = [1, 2, 3, 4];
console.log(sum(...array)); // 10
同时,您可以期望一些参数,并将其余参数作为最后一个定义的参数传递:
function processList(first, ...rest) {
// ...
}
而使用展开运算符的用途还不止于此,例如对象复制、在数组中展开数组等,超出了这个问题的范围...
$.makeArray()
:
将类数组对象转换为真正的JavaScript数组。
从问题中的示例中,只需使用此行代码:
var args = $.makeArray(arguments);
参数并不是真正的数组。
试试这个:
var args = [].splice.call(arguments,0);
var argsString = args.join('/');
arguments
是一个类数组对象(它具有映射到传递参数的编号属性和一个length
属性),但实际上它并不是一个数组。
在旧时代,你可以使用Array.prototype.slice.call(arguments)
(以及其他方法)将其转换为真正的数组。
然而,现在我们运气更好一些(当然这取决于您所支持的平台)。你可以选择...
const getSearchFields = (...args) => {
Array.isArray(args); // true
};
...or...
const getSearchFields = () => {
const args = Array.from(arguments);
Array.isArray(args); // true
};
arguments
是一个神奇的变量(它没有被明确地定义,那么它从哪里来呢?)'use strict'
)。arguments
不是 JavaScript 数组;它是一个特殊的对象,没有 join
方法。
this.headers = new HttpHeaders({ 'Authorization': token1, 'X-IBM-Client-Id': 'ddddddd' });
var a = ['Wind', 'Rain', 'Fire'];
var myVar1 = a.join();
var myVar2 = a.join(', ');
var myVar3 = a.join(' + ');
var myVar4 = a.join('');