Respuesta corta
La apuesta más segura es undefined
, y debería funcionar casi ubicua. Sin embargo, en última instancia, no se puede engañar a la función que se le pide para que piense que realmente se ha omitido un parámetro.
Si usted se encuentra inclinado hacia el uso de null
sólo porque es más corta, la posibilidad de declarar una variable llamada _
como un buen atajo para undefined
:
(function() { // First line of every script file
"use strict";
var _ = undefined; // For shorthand
// ...
aFunction(a, _, c);
// ...
})(); // Last line of every script
detalles
En primer lugar, saber que:
typeof undefined
evalúa a "undefined"
typeof null
evalúa a "object"
Así que supongamos que una función toma un argumento que se espera que sea de tipo "number"
. Si proporciona null
como valor, lo está dando un "object"
. La semántica está apagada.
Como desarrolladores siguen escribiendo cada vez más robusta código javascript, hay una creciente posibilidad de que las funciones que llaman explícitamente comprobar el valor de un parámetro para undefined
en comparación con el clásico if (aParam) {...}
. Estará en un terreno inestable si continúa usando null
de manera intercambiable con undefined
simplemente porque ambos fuerzan a false
.
Tenga en cuenta, sin embargo, que de hecho es posible que una función para saber si un parámetro se ha hecho omitido (versus ser ajustado a 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"
, su trabajo completo es ser del tipo que realmente no es. Es por eso que es el valor asumido por las variables no inicializadas y el valor de retorno predeterminado para las funciones.
+1. No sé exactamente qué hace esto (¿igual que 'undefined'?), Pero parece ser el mejor para" omitir los parámetros opcionales ". – Thilo
Descubrí que nunca se puede estar seguro de qué pasar en lugar del parámetro "omitido". Indefinido? ¿Nulo? 0? ¿Cuerda vacía? ¿Objeto vacío? ¿Formación? ** Si el comportamiento de omitir el parámetro no está docummentado, o no hay un parámetro predeterminado, está en un gran problema **. No puede dormir bien si actualiza la biblioteca externa. Solo Dios y tal vez el desarrollador de la biblioteca pueden saber qué pasará si pasa algo inesperado en lugar del parámetro requerido. En general, si este comportamiento no está documentado, los errores están en usted – Dan
Esto todavía funciona en 2017 en la última versión de Google Chrome, así que estoy votando. – Anonymous