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 undefinedevalúa como"undefined" -
typeof nullevalú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
undefinedtampoco 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 .