Дополнительно
Установка значения параметра по умолчанию для функции JavaScript
Я хотел бы, чтобы функция JavaScript имела необязательные аргументы, для которых я устанавливаю значение по умолчанию, и которые используются, если значение не определено (и игнорируются, если значение передано). В Ruby это можно сделать следующим образом:
def read_file(file, delete_after = false)
# code
end
Работает ли это в JavaScript?
function read_file(file, delete_after = false) {
// Code
}
2271
20
Согласно ES6/ES2015, параметры по умолчанию содержатся в спецификации языка.
просто работает.
Ссылка: Параметры по умолчанию - MDN
Вы также можете имитировать именованные параметры по умолчанию с помощью деструктуризации:
Pre ES2015,
Существует множество способов, но я предпочитаю именно этот - он позволяет передавать все, что угодно, включая false или null. (
typeof null == "object"
)Это присваивает
delete_after
значениеdelete_after
, если оно не является фальшивым значением, в противном случае присваивается строка `"мое значение по умолчанию здесь". Для получения более подробной информации ознакомьтесь с обзором языка, сделанным Дагом Крокфордом (Doug Crockford'), и посмотрите раздел, посвященный операторам.Этот подход не работает, если вы хотите передать значение falsey, то есть
false
,null
,undefined
,0
или"""
. Если вам нужно передать ложные значения, вам нужно использовать метод, описанный в ответе Тома Риттера.При работе с несколькими параметрами функции часто бывает полезно позволить потребителю передавать аргументы параметров в объекте, а затем слить эти значения с объектом, содержащим значения по умолчанию для функции
для использования
Лично я считаю, что такие простые вещи гораздо более лаконичны и читабельны.
В ECMAScript 6 Вы сможете написать именно то, что у вас есть:
Это позволит установить
delete_after
наfalse
, если он не присутствует или "неопределенным". Вы можете использовать возможности ES6 сегодня такой один с transpilers, такие как Бабель.См. MDN Статью для получения дополнительной информации.
Значения Параметров По Умолчанию
С ЕС6, вы можете сделать, пожалуй, один из самых распространенных идиом в
JavaScript
относится к установка значения по умолчанию для параметров функции. Как мы делали это в течение многих лет должна выглядеть вполне привычно:Эта модель является наиболее широко используемым, но это опасно, когда мы передаем ценности, как
это решение работает для меня в JS:
Просто использовать явное сравнение с неопределено.
Как обновление...с ECMAScript 6 Вы можете наконец установить значения по умолчанию в объявлении параметра функции вот так:
А ссылка - http://es6-features.org/#DefaultParameterValues
Я очень рекомендую крайнюю осторожность при использовании значений параметров по умолчанию в JavaScript. Это часто создает ошибки при использовании в сочетании с функциями высшего порядка, как
объекту
,map
иуменьшить
. Например, рассмотрим следующую строку кода:parseInt имеет функцию parseInt необязательный второй параметр(с [
**основание**
=10])`, но parseInt карте звонков с тремя аргументами: (element, index, и array).Я предлагаю вам отделить необходимые параметры формы ваше опционного/по умолчанию ценятся аргументы. Если ваша функция принимает 1,2, или 3 необходимых параметров, для которых значение по умолчанию не имеет смысла, сделать их позиционные параметры, функции, дополнительные параметры должны следовать в виде именованных атрибутами одного объекта. Если ваша функция принимает 4 или более, может быть, разумнее поставить все аргументы через атрибуты одного параметра объекта.
В вашем случае я хотел бы предложить вам написать свой функция deletefile такой: (отредактировано в
вместо
'ы комментарии)...в
в
Запустив приведенный выше фрагмент иллюстрирует опасностей, таящихся за значения аргументов по умолчанию для неиспользуемых параметров.
будучи долгое время разработчик C++ (Новичок в веб-разработке :)), когда я впервые наткнулся на эту ситуацию, я сделал задание параметра в определении функции, как это упомянуто в вопросе, как следует.
Но будьте осторожны, что он не'т работать стабильно в разных браузерах. Для меня это работает в Chrome на моем рабочем столе, но не работает в Chrome на Android. Безопасным вариантом, так как многие уже упоминали выше -
Намерение для этого ответа не повторять одни и те же решения, что другие уже упомянули, но, чтобы сообщить, что задание параметра в определении функции может работать на некоторых браузерах, но Дон'т полагаться на него.
Для тех, кто заинтересован в том, чтобы там работать код в Microsoft края, не использовать по умолчанию в параметрах функции.
В этом примере краю бросит ошибке "ожидая ')'&и"
Чтобы обойти это использовать
По состоянию на 08 августа 2016 это еще вопрос
В соответствии с синтаксисом
вы можете определить значение по умолчанию для формального параметра. а также проверьте значение undefined с помощью для вызова typeof функция.
ЕС6: как уже говорилось в большинстве ответов, в ЕС6, вы можете просто инициализировать параметр со значением.
В ES5: большинство даны ответы арен'т достаточно хорошо для меня, потому что бывают случаи, когда мне, вероятно, придется пройти falsey значения, такие как
0
,нуль
инеопределенные
функции. Чтобы определить, если параметр не определен, так что's значение, я прошел вместо неопределенной причине не были определены вообще я делаю так:Используйте это, если вы хотите использовать последний
ECMA6
синтаксис:в
в
Это называется
parameters функция по умолчанию
. Это позволяет формальные параметры должны быть инициализированы значениями по умолчанию, если никакое значение или undefined передается. Примечание: это не будет работать с Internet Explorer или старых браузерах.Для максимально возможного совместимость использовать это:
в
в
Обе функции имеют точно такое же поведение, как каждый из этих примеров рассчитывать на то, что переменная параметр будет undefined, если ни один параметр не был передан при вызове этой функции.
Да, используя параметры по умолчанию полностью поддерживается ЕС6:
или
но до В в ES5 вы можете легко сделать это:
Что означает, если значение есть, использовать значение, в противном случае, используйте второе значение после операции | | который делает то же самое...
Примечание: также есть большая разница между тем, если вы передаете значение на ES6 еще одно значение ложь, которое будет заменено на новое значение, что-то вроде
нуль
, или в""
В... но в ES5 один только замене только, если переданное значение-истина, что's, потому что путь||
рабочая...Если вы используете
на ES6+
можно задать параметры по умолчанию следующим образом:в
в
Если вы нуждаетесь
в ES5
синтаксис вы можете сделать это следующим образом:в
в
В приведенном выше синтаксисе используется
или
оператор. Вили
оператор всегда возвращает первое значение, если это может быть преобразовано вtrue
, если не возвращает righthandside значение. Когда функция вызывается без соответствующего аргумента параметр переменной (бар
в нашем примере) получит значение undefined в JS движок.неопределенное
потом конвертируется в false и таким образом " или " оператор вернет значение 0.в
в
Здесь функция Foo () - это функция, которая имеет параметр с именем argValue. Если мы ничего не передаем здесь называю функцию, то throwIfNoValue функция() будет называться и возвращенный результат будет назначена только argValue аргумент. Это как вызов функции может использоваться в качестве параметра по умолчанию. Что делает код более простым и читаемым.
Этот пример был взят из здесь
Если по каким-то причинам вы не на ES6 и **** и используя
лодашь
здесь-это краткий путь к дефолту параметры функции через_.defaultTo
способ:в
в
Который будет установлен по умолчанию, если текущее значение является Нана, нуль или определен
Да это упоминается как параметр по умолчанию
Параметры функции по умолчанию разрешить формальные параметры должны быть инициализированы значениями по умолчанию, если никакое значение или undefined передается.
Синтаксис:
Описание:
Параметры функций по умолчанию, однако не определено, в ситуациях это может быть полезно, чтобы установить другое значение по умолчанию. Это где параметры по умолчанию могут помочь.
В прошлом генеральная стратегия для установки по умолчанию была проверка значений параметров в тело функции и присвоить значение, если они неопределены. Если значение не указано при вызове, его значение будет неопределенным. Вам придется установить условную убедитесь, что параметр не определен
С параметрами по умолчанию в ES2015, проверка в теле функции больше нет необходимости. Теперь вы можете просто поставить значение по умолчанию в функции головы.
Пример различий:
Различные Примеры Синтаксис:
Обивка не определено против других значений ложь:
Даже если значение явно не задано при вызове, значение аргумента num-это по умолчанию.
Вычислено во время вызова:
Аргумент по умолчанию получает вычислено во время вызова, так что в отличие от некоторых других языков, новый объект создается каждый раз, когда функция вызывается.
Параметры по умолчанию доступен для позже параметрами по умолчанию:
Params уже сталкивался доступны для позже параметрами по умолчанию
Функции, определенные в теле функции:
Введен в Gecko 33 (Firefox 33 с / Тандерберд 33 / был SeaMonkey 2.30). Функции, объявленные в теле функции не могут быть отнесены внутри параметров по умолчанию и бросить ReferenceError (в настоящее время ошибку TypeError в SpiderMonkey, см. ошибку 1022967). Параметры по умолчанию всегда выполняется первой, объявления функции внутри тела функции после оценки.
Параметры без значений по умолчанию после того, как параметры по умолчанию:
До Гекко 26 (В Firefox 26 / Тандерберд 26 / 2.23 не Opera / Firefox ОС 1.2), следующий код в результате синтаксис ошибка. Это было исправлено в баг 777060 и работает, как ожидалось в более поздних версиях. Параметры по-прежнему слева направо, перезапись параметров по умолчанию, даже если впоследствии параметров без значений по умолчанию.
Деструктурированных п АР Амет р с присвоения значений по умолчанию:
Вы можете использовать для присвоения значений по умолчанию с деструктурируется обозначение назначение