如果您是JavaScript的新手或者只是寻找一个复习,这个系列是给你的。继续阅读,看看如何使你的JavaScript代码干,使用其余参数。
JavaScript函数可以使用任意数量的参数。与其他语言(如C#和Java)不同,您可以在调用JavaScript函数时传递任意数量的参数。JavaScript函数允许未知数量的函数参数。在ECMAScript 6之前,JavaScript有一个变量来访问这些未知或可变数目的参数,这是一个类似数组的对象,但不是一个数组。考虑这个代码来理解参数变量:
function add(){ var result = 0; for(let i=0;i<arguments.length;i++){ result = result + arguments[i]; } return result; }var r = add(6,9,3,2);console.log(r);var t = add(7,56,9);console.log(t);正如你所看到的那样,这个参数对象被用来访问未知的或可变的函数参数。即使参数使用长度属性和方括号,它不是一个真正的JavaScript数组。您不能使用其他JavaScript数组方法,如pop,push,slice等等。使用参数的一些问题是:
JavaScript函数参数对象不是真正的JavaScript数组; 因此,您不能使用其他数组方法,如pop,push,slice等。
在内部函数中访问外部函数的参数对象是很困难的。要使用它,需要将外部函数的参数函数分配给一个变量,然后在内部函数中使用它。
如果你想使用参数对象作为数组,那么你需要使用Aarry.prototype.slice手动转换它。
ECMAScript 6引入了一个新特性Rest Parameters,它将一个未知数量的参数表示为一个函数中的数组。它不仅以一个数组表示额外的参数,而且解决了参数对象的许多问题。让我们用其余的参数重写上面的add函数。
function add(...theArgs){ var result = 0; for(let i=0;i<theArgs.length;i++){ result = result + theArgs[i]; } return result; }var r = add(6,9,3,2);console.log(r);var t = add(7,56,9);console.log(t);你可以定义一个休息参数为... theArgs或... args。如果最后命名的函数参数前缀为...(三个点),则它将成为该函数的其余参数。JavaScript函数的其余参数是纯JavaScript数组。在上面的代码中,... theArgs是函数add的其余参数,因为它是唯一的命名参数,并且它也以...(三个点)作为前缀。由于rest参数是一个JavaScript数组,因此您可以在rest参数theArgs上执行诸如push,pop等操作,如下面的代码所示:
function add(...theArgs){ theArgs.push(10); var result = 0; for(let i=0;i<theArgs.length;i++){ result = result + theArgs[i]; } var lastItem = theArgs.pop(); console.log(lastItem); return result; }JavaScript函数的rest参数也可以和其他参数一起使用。如果您不想在特定参数数组中包含特定参数,则可能需要在函数中使用其他命名参数。让我们考虑下一个代码块:
function add(num1, num2, ...theArgs){ console.log(num1); console.log(num2); console.log(theArgs.length);}var r = add(6,9,3,2);var t = add(7,56,9);对于第一次函数调用,6和9将分别分配给num1和num2。对于第二个函数调用,7和56将被分配给num1和num2。开始第三个参数的参数将被分配给其余的参数数组。请记住,前两个参数不会成为其余参数数组的一部分。所以,如果不是所有的值都应该包含在参数中,你应该在开始时将它们定义为逗号分隔的命名参数。下面给出的代码会给你一个错误:
function add(num1, ...theArgs,num2){ console.log(num1); console.log(num2); console.log(theArgs.length);}在上面的代码清单中,其余参数不是最后一个参数,所以JavaScript会引发错误。其余参数必须是最后一个形式参数。
JavaScript允许你破坏其余的参数,这意味着你可以将休息变量的数据解压缩成一个独立的变量名。让我们考虑下面的代码:
function add(...[a,b,c]){ return a+b+c; }var r = add(6);console.log(r);var t = add(7,56,9);console.log(t);对于第一次函数调用,将分配a = 6,b = undefined,c = undefined,对于第二个函数调用,将分配a = 7,b = 56,c = 9。在这种情况下,如果你传递任何额外的参数,那么在函数中将被忽略。
JavaScript函数的rest参数比参数对象使用函数的未知参数有很大的改进。这是一个纯粹的JavaScript数组; 因此,你可以使用所有的数组方法。您可以将其余的变量数据解压缩到指定的变量。您可以给其他参数指定任何名称,这是总是使用参数关键字的一个重大改进。
在这个“简单的JavaScript”系列的下一篇文章中,您将学习JavaScript函数中的默认参数。您可以在ECMA International网站上详细了解这些主题。此外,不要忘记检查Ignite UI,您可以使用HTML5,Angular,React或ASP.NET MVC创建富Internet应用程序。