ES2015'ten itibaren iki yöntem vardır.
Bu nesne fonksiyonlar içine yerleştirilmiştir ve uygun şekilde bir fonksiyonun argümanlarını ifade eder. Bununla birlikte, teknik olarak bir dizi değildir, bu nedenle tipik dizi işlemleri üzerinde çalışmaz. Önerilen yöntem, Array.frombir dizi oluşturmak için forma operatörünü kullanmaktır .
Kullandığım diğer cevapları gördüm slice. Bunu yapma. Optimizasyonları önler (kaynak: MDN ).
Array.from(arguments)
[...arguments]
Ancak argumentsbunun problemli olduğunu savunurum çünkü bir fonksiyonun girdi olarak kabul ettiği şeyi gizler. Bir argumentsişlev genellikle şu şekilde yazılır:
function mean(){
let args = [...arguments];
return args.reduce((a,b)=>a+b) / args.length;
}
Bazen, işlev başlığı, C benzeri bir şekilde argümanları belgelemek için aşağıdaki gibi yazılır:
function mean(/* ... */){ ... }
Ancak bu nadirdir.
Neden sorunlu olduğuna gelince, örneğin C'yi ele alalım. C, K&R C olarak bilinen dilin eski bir ANSI öncesi lehçesi ile geriye dönük olarak uyumludur. K&R C, fonksiyon prototiplerinin boş bir argüman listesine sahip olmasını sağlar.
int myFunction();
/* This function accepts unspecified parameters */
ANSI C, varargs( ...) için bir olanak sağlar ve voidboş bir bağımsız değişkenler listesi belirtir.
int myFunction(void);
/* This function accepts no parameters */
Birçok kişi , işlevin sıfır bağımsız değişken almasını beklediklerinde yanlışlıkla unspecifiedargüman listesi ( int myfunction();) ile işlevleri bildirir. Fonksiyon, çünkü bu teknik olarak bir hata olduğunu edecektir argümanları kabul ediyoruz. Herhangi bir sayıda.
varargsC'deki uygun bir işlev şu şekildedir:
int myFunction(int nargs, ...);
Ve JavaScript'in aslında buna benzer bir şeyi var.
Aslında zaten yayılmış operatörü gösterdim.
...name
Oldukça çok yönlüdür ve varargs'ı iyi belgelenmiş bir şekilde belirtmek için bir işlevin bağımsız değişken listesinde ("dinlenme parametreleri") de kullanılabilir:
function mean(...args){
return args.reduce((a,b)=>a+b) / args.length;
}
Veya lambda ifadesi olarak:
((...args)=>args.reduce((a,b)=>a+b) / args.length)(1,2,3,4,5); // 3
Forma operatörünü çok tercih ederim. Temiz ve kendi kendini belgelendirir.
for - inile bir döngü kullanmak iyi bir fikir değildirarguments-lengthbunun yerine özellik üzerinde yineleme için bir 'normal' kullanılmalıdır