JavaScript函数可以采用无限制的参数吗? 像这样:
testArray(1, 2, 3, 4, 5...);
我在尝试:
var arr = [];
function testArray(A) {
arr.push(A);
}
但这不起作用(输出只是第一个参数)。或者唯一的方法是:
function testArray(a, b, c, d, e...) {
}
由于
答案 0 :(得分:54)
你可以引用一个奇怪的“魔法”变量叫做“参数”:
function manyArgs() {
for (var i = 0; i < arguments.length; ++i)
alert(arguments[i]);
}
喜欢一个数组,但它不是一个数组。事实上,你真的不应该使用它真是太奇怪了。通常的做法是将其值转换为真正的数组:
function foo() {
var args = Array.prototype.slice.call(arguments, 0);
// ...
在那个例子中,“args”将是一个普通的数组,没有任何奇怪的东西。 “参数”存在各种令人讨厌的问题,在ECMAScript 5中,其功能将受到限制。
编辑 - 尽管使用.slice()
函数确实很方便,但事实证明将arguments
对象从函数中传出会导致优化问题,以至于执行此操作的功能可能根本无法优化。因此,将arguments
转换为数组的简单直接方法是
function foo() {
var args = [];
for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i];
// ...
}
答案 1 :(得分:18)
从ECMAScript 2015(或ES6)开始,我们还可以访问rest parameters,这为我们提供了一种更清晰的方式来管理参数:
function foo(a, b, ...others) {
console.log("a and b are ", a, b);
for (let val of others) {
console.log(val);
}
}
foo(1, 2, 3, 4, 5);
在撰写本文时,Chrome 47 +,Firefox 15+和Edge都支持此功能。该功能也可以通过Babel和TypeScript转发到ES5。
答案 2 :(得分:5)
使用ECMAScript 6,您可以使用其余的参数语法:
const testArray = (...args) => {
console.log(args);
};
testArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
答案 3 :(得分:1)
function toArray() {
return arguments;
}
var myargs = toArray(1, 2, 3, 4, 5, 6);
每个js函数都有arguments
关键字
答案 4 :(得分:1)
var arr = [];
function testArray() {
Array.prototype.push.apply(arr, arguments);
}
答案 5 :(得分:1)
你也可以“施放”它,为你节省丑陋的循环:
var getArguments = function() {
return arguments;
};
var foo = getArguments(1,2,3,4);
// console.log(foo.slice()); => TypeError: foo.slice is not a function
var foo = Object.values(foo);
console.log(foo); // => [ 1, 2, 3, 4 ]
foo.push(5);
console.log(foo); // => [ 1, 2, 3, 4, 5 ]
答案 6 :(得分:1)
有一些遗留方法,但是我更喜欢ES6
和更高版本,因此,如果我想实现这一点,我将其编写如下:
const func = ...arg => console.log(arg);
简单而尖端的技术。
答案 7 :(得分:0)
Javascript ES5
[0] [1]
[0] [1] [2] [0] [1] [2]
list = [['Bob', 13 ,156], ['Jonny', 24, 180]]
list[0][0] = 'Bob'
list[1][2] = 180
Javascript ES6
for i in list:
age = i[1]
if age > 18:
print("Age is greater than 18", i)
答案 8 :(得分:0)
const outputDiv=document.querySelector('.output');
const output=(...x)=>{
return outputDiv.innerHTML=x;
}
output(1,2,3,4,['hello',5,6],true,null);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Javascript Practice</title>
<link href="https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,800;1,900&display=swap" rel="stylesheet">
<style>
body{font-family: 'Raleway', sans-serif; background-color: #060606;}
.center{height:100vh; width: 100%; display: grid;align-items:center;justify-content: center;}
.output{font-size: 15px;color: rgb(59, 59, 255);font-weight: 200;}
</style>
</head>
<body>
<div class="center">
<div class='output'></div>
</div>
<script src="js.js"></script>
</body>
</html>