Necesito un método que pueda tener un número arbitrario de parámetros. En C# tenemos la declaración params
. ¿Tenemos algo similar en JavaScript?¿Hay un JavaScript equivalente para C# 'params'?
Respuesta
No es la colección arguments
, que contiene todos los argumentos que se pasan a la función.
a) no es necesario especificar argumentos "opcionales" en la firma de la función yb) cualquier función acepta cualquier cantidad de parámetros.
function foo() {
console.log(arguments);
}
foo(1,2,3,4); // logs [1, 2, 3, 4]
Del mismo modo, no hay necesidad de suministrar argumentos "necesarios" en una llamada de función:
function foo(a, b, c, d) {
console.log(arguments);
}
foo(1,2); // logs [1, 2]
Cualquier argumento con nombre en la firma pero no se incluye en la llamada a la función será undefined
.
Tenga en cuenta que arguments
se comporta como una matriz, pero técnicamente no es una. Por ejemplo, puede llamar al arguments[0]
, pero no puede llamar al arguments.slice()
. Lo que puede hacer para evitar esto es usar el prototipo de Array:
Array.prototype.slice.call(arguments, 1, 2);
JavaScript tiene arguments
objeto dentro de funciones. Contiene todos los parámetros pasados a la función.
Sí. arguments
.
function concatStrings() {
var str = '';
for (var i = 0; i < arguments.length; i++) {
str += arguments[i];
}
return str;
}
Tenga en cuenta que arguments
no es una matriz, por lo que no tiene métodos como join
o push
. Es solo un objeto similar a una matriz (con propiedades numéricas y una propiedad length
) por lo que puede repetirse.
Es algo implícito en la variable especial "argumentos". Utilice la siguiente manera:
function something(arg1, arg2) {
for (var i = 0; i < arguments.length; i++) {
var x = arguments[i];
}
}
Entonces se le puede llamar como something(1, 2, 3, 'a', 'b', 'c')
Más ejemplos aquí: http://www.jtricks.com/javascript_tutorials/varargs.html
Sé que este hilo es muy viejo, pero creo que falta algo aquí.
Hay Rest parameter (introducido en ECMAScript 6) que nos permitirá para representar un indefinida número de argumentos como un array.
Siempre devuelve una matriz.Lo que significa que incluso en un terreno defensivo de JavaScript, está bien hacer cosas como comprobar .length de descanso sin guardias.
Sintaxis:
function(a, b, ...theArgs) {
// ...
}
Hay tres diferencias principales entre los parámetros de descanso y los argumentos del objeto:
- parámetros de descanso son sólo los que no se les ha dado un nombre distinto , mientras que el objeto arguments contiene todos los argumentos pasados a la función
- el objeto argumentos no es una matriz real, mientras que los parámetros de resto son instancias de matriz ces, lo que significa que métodos como sort, map, forEach o pop se pueden aplicar directamente;
- el objeto arguments tiene una funcionalidad adicional específica para sí misma (como la propiedad callee).
lectura adicional: Spread
function f(x, ...y) {
// y is an Array
return x * y.length;
}
console.log("Expected result : 3*2 = 6 & Actual result : " + f(3, "hello", true));
console.log("Expected result : 3*4 = 12 & Actual result : " + f(3, "a", true, "b", 1));
//here we are not passing anything to "y" but its still safe to check .length of "y" because it always return an array.
console.log("Expected result : 3*0 = 0 & Actual result : " + f(3));
Creo que esta debería ser la respuesta esperada porque es el verdadero paralelo a params (aunque no todos podemos usar ES6) – shirbr510
- 1. ¿Hay un equivalente a php.net para JavaScript?
- 2. ¿Hay un equivalente en C para las plantillas de C++?
- 3. ¿Hay un javascript equivalente a. = Para auto concatenar?
- 4. C# String.IsNullOrEmpty JavaScript equivalente
- 5. ¿Hay un Java equivalente a MISRA C?
- 6. ¿Hay un equivalente de C# de m_nCmdShow?
- 7. ¿Hay un equivalente de ipython para erlang?
- 8. ¿Hay un equivalente de str_replace en C++?
- 9. ¿Hay un C++ equivalente a getcwd?
- 10. ¿Hay un C# equivalente a IsDebuggerPresent()?
- 11. ¿Hay un equivalente a typedef en C#?
- 12. ¿Hay un equivalente a Groovy en C#?
- 13. ¿Hay un equivalente en C para el módulo Perl's Carp?
- 14. ¿Hay un equivalente de 'esto' en C# para miembros estáticos?
- 15. ¿Hay un equivalente en C# para este código de Java?
- 16. ¿Hay una función equivalente de JavaScript o Jquery para dormir?
- 17. ¿Hay un equivalente estándar de C++ del Vector3 de C#?
- 18. ¿Hay un equivalente a HLint para Erlang?
- 19. ¿Hay un equivalente Request.IsMvcAjaxRequest() para jQuery?
- 20. ¿Hay un equivalente de Cake para Python?
- 21. ¿Hay un equivalente de Jack para nodejs?
- 22. ¿Hay un sprintf equivalente para node.js
- 23. ¿Hay un equivalente Java para LINQ?
- 24. ¿Hay un equivalente de Profiler para MySql?
- 25. ¿Hay un equivalente en JavaScript de Ruby's andand?
- 26. ¿Hay un equivalente de estática de C en C#?
- 27. ¿Hay un equivalente C/C++ de eval ("function (arg1, arg2)")?
- 28. ¿Hay un equivalente al urllib de python en c/C++?
- 29. ¿hay un Java equivalente al "algo" de JavaScript?
- 30. C# params con al menos un valor
¿Ha intentado consultar una referencia javascript? – Marcin
@Marcin, no encontraste nada sobre 'params', ¿verdad? –