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.from
bir 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 arguments
bunun problemli olduğunu savunurum çünkü bir fonksiyonun girdi olarak kabul ettiği şeyi gizler. Bir arguments
iş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 void
boş 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 unspecified
argü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.
varargs
C'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 - in
ile bir döngü kullanmak iyi bir fikir değildirarguments
-length
bunun yerine özellik üzerinde yineleme için bir 'normal' kullanılmalıdır