Предустановленная переменная функции Javascript - PullRequest
5 голосов
/ 03 сентября 2010

У меня есть функция, которой я хочу передать аргумент, однако я хочу, чтобы она по умолчанию равнялась 0.

Возможно ли сделать это аналогично PHP, например:

function byMonth(export=0) {

Большое спасибо

Ответы [ 3 ]

11 голосов
/ 03 сентября 2010

Не делайте этого

function byMonth(export){
  export = export || 0;
  alert(export);
}

Edit:

В предыдущей версии была тихая ошибка, я оставляю ее просто в качестве примера того, что НЕ ДЛЯ ТОГО .

Проблема в том, что если передать функцию в аргумент false, она примет значение по умолчанию, хотя вы на самом деле вызывали ее с аргументом.

Все остальные параметры будут игнорироваться, и будет использоваться значение по умолчанию (из-за концепции javascript falsy )

  • Число ноль 0
  • Пустая строка ""
  • NaN
  • false
  • null
  • и (очевидно) undefined

Более безопасный способ проверить наличие параметра:

  function byMonth(export){
      if(export === undefined) export = 0;
  }

Редактировать 2 :

Предыдущая функция не на 100% безопасна, так как кто-то (возможно, идиот) может определить undefined, заставляя функцию вести себя неожиданно. Это окончательная, работающая где угодно, пуленепробиваемая версия:

function byMonth(export){
  var undefined;
  if(export === undefined) export = 0;
}
4 голосов
/ 03 сентября 2010

Вы можете установить значение по умолчанию внутри, как это:

function byMonth(export) {
  export = export || 0;
  //your code
}
0 голосов
/ 23 февраля 2017

Я опоздал более чем на 6 лет, но теперь с ES6 есть другое решение. Пабло Фернандес сказал, что вы можете установить значение undefined, и вы должны проверить это так:

function byMonth(export){
  var undefined;
  if(export === undefined) export = 0;
}

Ну, теперь вы можете сделать это:

function byMonth(export){
  if(export === void 0) export = 0;
}

void 0 всегда оценивается как «реальный» undefined.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...