una - Saltar parámetros de funciones opcionales en JavaScript
pasar parametros a una funcion javascript desde html (3)
Respuesta corta
La apuesta más segura undefined
está undefined
, y debería funcionar de manera casi ubicua. Sin embargo, en última instancia, no puede engañar a la función que se está llamando para que piense que realmente omitió un parámetro.
Si se siente inclinado a usar null
solo porque es más corto, considere declarar una variable llamada _
como una buena forma abreviada de undefined
:
(function() { // First line of every script file
"use strict";
var _ = undefined; // For shorthand
// ...
aFunction(a, _, c);
// ...
})(); // Last line of every script
Detalles
Primero, sepa que:
-
typeof undefined
evalúa como"undefined"
-
typeof null
evalúa como"object"
Entonces, supongamos que una función toma un argumento que espera ser de tipo "number"
. Si proporciona null
como valor, le está asignando un "object"
. La semántica está apagada. 1
A medida que los desarrolladores continúan escribiendo código javascript cada vez más robusto, existe una posibilidad cada vez mayor de que las funciones a las que llamas verifiquen explícitamente el valor de un parámetro para undefined
en lugar del clásico if (aParam) {...}
. Estarás en un terreno inestable si continúas usando null
indistintamente con undefined
solo porque ambos suceden coercir a false
.
Sin embargo, tenga en cuenta que, de hecho, es posible que una función diga si un parámetro se omitió realmente (en lugar de configurarlo como undefined
):
f(undefined); // Second param omitted
function f(a, b) {
// Both a and b will evaluate to undefined when used in an expression
console.log(a); // undefined
console.log(b); // undefined
// But...
console.log("0" in arguments); // true
console.log("1" in arguments); // false
}
Notas al pie
- Mientras que
undefined
tampoco es del tipo"number"
, todo el trabajo es ser un tipo que no es realmente un tipo. Es por eso que es el valor asumido por las variables sin inicializar y el valor de retorno predeterminado para las funciones.
¿Podría indicarme la forma agradable de omitir parámetros opcionales en JavaScript?
Por ejemplo, quiero tirar todos los parámetros opt_
aquí:
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {''Cache-Control'': ''no-cache''}, opt_timeoutInterval)
Simplemente pase null
como valor de parámetro.
Agregado: también puede omitir todos los parámetros opcionales consecuentes después del último al que desea pasar un valor real (en este caso, puede omitir el parámetro opt_timeoutInterval
)
Solución:
goog.net.XhrIo.send(url, undefined, undefined, undefined, {''Cache-Control'': ''no-cache''})
Debe usar undefined
lugar del parámetro opcional que desea omitir, ya que este 100% simula el valor predeterminado para los parámetros opcionales en JavaScript.
Pequeño ejemplo:
myfunc(param);
//is equivalent to
myfunc(param, undefined, undefined, undefined);
Recomendación fuerte : use JSON si tiene muchos parámetros, y puede tener parámetros opcionales en medio de la lista de parámetros. Mira cómo se hace esto en jQuery .