Krótka odpowiedź
Najbezpieczniejszym zakład jest undefined
, i powinien pracować prawie wszędzie. Ostatecznie jednak nie możesz oszukać wywoływanej funkcji w myśleniu, że naprawdę pominąłeś parametr.
Jeśli znajdziesz się skłonność do korzystania null
tylko dlatego, że jest krótszy, należy rozważyć deklarując zmienną o nazwie _
jako miły skrót dla undefined
:
(function() { // First line of every script file
"use strict";
var _ = undefined; // For shorthand
// ...
aFunction(a, _, c);
// ...
})(); // Last line of every script
Szczegóły
pierwsze, wiesz, że:
typeof undefined
ocenia na "undefined"
typeof null
ocenia się "object"
Więc załóżmy, że funkcja przyjmuje argument, że oczekuje się od typu "number"
. Jeśli podasz wartość null
, nadasz jej wartość "object"
. Semantyka jest wyłączona.
Jak deweloperzy nadal pisać coraz bardziej solidne kodu JavaScript, istnieje coraz większa szansa, że funkcje wywołać jawnie sprawdzić wartość parametru dla undefined
w przeciwieństwie do klasycznej if (aParam) {...}
. Będziesz na niepewnym gruncie, jeśli będziesz nadal używać null
zamiennie z undefined
tylko dlatego, że oboje wymuszają na false
.
Należy pamiętać jednak, że w rzeczywistości jest to możliwe dla funkcji, aby stwierdzić, czy parametr został właściwie pominięte (versus jest ustawiony na 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
}
Przypisy
- Podczas gdy
undefined
również nie jest typu "number"
, zadaniem jest być typem, który nie jest typem. Dlatego jest to wartość przyjęta przez niezainicjowane zmienne i domyślna wartość zwracana dla funkcji.
+1. Nie wiem, co to dokładnie robi (tak samo jak 'undefined'?), Ale z pewnością wygląda najlepiej dla" pomijania opcjonalnych parametrów ". – Thilo
Zauważyłem, że nigdy nie możesz być pewien, co przekazać zamiast "pominięty" parametr. Niezdefiniowany? Zero? 0? Pusta struna? Pusty obiekt? Szyk? ** Jeśli zachowanie pominięcia parametru nie zostało zapisane lub nie ma domyślnego parametru, masz duże problemy **. Nie możesz spać dobrze, jeśli zaktualizujesz bibliotekę zewnętrzną. Tylko bóg, a może twórca biblioteki, może wiedzieć, co się stanie, jeśli przekażesz coś nieoczekiwanego zamiast wymaganego parametru. Ogólnie, jeśli to zachowanie nie jest udokumentowane, błędy są na ciebie – Dan
To nadal działa w 2017 roku na najnowszej wersji Google Chrome, więc pracuję nad zmianą. – Anonymous