Возможный дубликат:
Есть ли лучший способ сделать необязательные параметры функции в Javascript?
Можно ли объявить параметр по умолчанию, например
function myFunc( a, b=0)
{
// b is my optional parameter
}
в javascript.
Возможный дубликат:
Есть ли лучший способ сделать необязательные параметры функции в Javascript?
Можно ли объявить параметр по умолчанию, например
function myFunc( a, b=0)
{
// b is my optional parameter
}
в javascript.
С ES6: теперь это часть языка:
function myFunc(a, b = 0) {
// function body
}
Пожалуйста, имейте в виду, что ES6 проверяет значения по undefined
а не по истинности (поэтому только действительные неопределенные значения получают значение по умолчанию - ложные значения, такие как ноль, не будут по умолчанию).
С ES5:
function myFunc(a,b) {
b = b || 0;
// b will be set either to b or to 0.
}
Это работает до тех пор, пока все значения, которые вы явно передаете, являются правдивыми. Значения, которые не соответствуют действительности в соответствии с комментарием MiniGod: null, undefined, 0, false, ''
Довольно часто можно увидеть, как библиотеки JavaScript выполняют несколько проверок необязательных входных данных перед тем, как функция действительно запустится.
С ES6 это возможно точно так, как вы описали; подробное описание можно найти в документации.
Параметры по умолчанию в JavaScript могут быть реализованы главным образом двумя способами:
function myfunc(a, b)
{
// use this if you specifically want to know if b was passed
if (b === undefined) {
// b was not passed
}
// use this if you know that a truthy value comparison will be enough
if (b) {
// b was passed and has truthy value
} else {
// b was not passed or has falsy value
}
// use this to set b to a default value (using truthy comparison)
b = b || "default value";
}
Выражение b || "default value"
оценивает значение AND существование b
и возвращает значение "default value"
, если b
либо не существует, либо является ложным.
Альтернативное объявление:
function myfunc(a)
{
var b;
// use this to determine whether b was passed or not
if (arguments.length == 1) {
// b was not passed
} else {
b = arguments[1]; // take second argument
}
}
Внутри функции имеется специальный "массив" arguments
; он содержит все аргументы, начиная с индекса 0
до N - 1
(где N
- количество переданных аргументов).
Обычно это используется для поддержки неизвестного количества необязательных параметров (одного типа); однако предположение о том, что ожидаемые аргументы являются предпочтительными!
Хотя undefined
не записывается с ES5, некоторые браузеры, как известно, не применяют это. Есть две альтернативы, которые вы можете использовать, если вы беспокоитесь об этом:
b === void 0;
typeof b === 'undefined'; // also works for undeclared variables