Utworzyłem taką funkcję:
function saveItem(andClose = false) {
}
Działa dobrze w przeglądarce Firefox
W IE daje ten błąd na konsoli:
Expected ')'
W Chrome daje ten błąd w konsoli:
Uncaught SyntaxError: Unexpected token =
Obie przeglądarki oznaczają źródło błędu jako linię tworzenia funkcji.
javascript
jquery
Talon
źródło
źródło
Odpowiedzi:
Nie możesz tego zrobić, ale zamiast tego możesz zrobić coś takiego:
Często jest to skracane do czegoś takiego:
Aktualizacja
Powyższe dotyczy ECMAScript <= 5. ES6 zaproponował parametry domyślne . Więc powyższe mogłoby zamiast tego przeczytać:
źródło
name = name || 'Bob';
nie powinno być używane, ponieważ jeśli nazwa jest ustawiona na wartość falsey, zamiast nazwy zostanie użyta wartość domyślnaname = name || 'Bob'
używaćname = (name === undefined) ? '' : name;
To nie jest poprawna składnia ECMAScript, ale jest to poprawna składnia dla nadzbioru funkcji Mozilli, które dodają do swojej implementacji języka.
Domyślna składnia przypisania parametrów prawdopodobnie pojawi się w ECMAScript 6.
źródło
foo = foo || "the default"
. Czy można sprawdzić.length
naarguments
obiekcie. Lub możesz po prostu przetestować każdy parametrundefined
. Istnieją różne okazje do wykorzystania każdego z nich.JavaScript nie zezwala na użycie „domyślnego” specyfikatora.
Szybkim sposobem robienia tego, co chcesz, jest zmiana:
do następujących:
źródło
andClose
na fałsz, było 0 ... nie do końca to, czego bym się spodziewał ...var andClose = andClose === undefined? false: andClose;
To pozwoli ci przejść0
do funkcji i nie zastępować jejfalse
.Podany kod nie będzie działać w Chrome <wersja 49: https://kangax.github.io/compat-table/es6/#test-default_function_parameters
Użyłeś prawidłowej składni ECMAScript 2015:
Moim zdaniem najlepszym sposobem korzystania z funkcji ES2015 jest łączenie zasobów z przeglądarką lub WebPack , z krokiem umożliwiającym użycie Babel do przekształcenia ES2015 na ES5. W ten sposób nie musisz się martwić o tabelę zgodności przeglądarek ES2015. Rozpoczęcie pierwszego razu jest trudne, ale warto.
źródło
W Twoim przypadku masz inną alternatywę, aby upewnić się, że zmienna jest wartością logiczną:
Wartość domyślna to
undefined
itrue == undefined
=>false
, więc domyślną wartością będziefalse
:)źródło
andClose
zmienna jest już przypisana w tym zakresie