Как передать значение undefined в функцию с несколькими параметрами? - PullRequest
42 голосов
/ 25 января 2012

Я хочу передать значение undefined для функции с несколькими параметрами, но без пропуска параметра.

Что я имею в виду под "без пропуска параметра" . Я имею в виду, что мы не должны просто пропустить parm2, как в этом примере:

function myFunction (parm1, parm2) {}
myFunction("abc");

Это действительно сделает parm2 неопределенным, но мне не разрешено делать это таким образом, потому что мне нужно будет указать другие параметры ПОСЛЕ пропущенного параметра, поэтому предыдущий метод не будет работать в том случае, если я хочу сделать parm1 undefined НО также хотят иметь другие параметры после этого для хранения значения.

Я попытался решить проблему с:

myFunction( ,"abc"); //doesn't seem to work

Обновление:

и myFunction(undefined, "abc"); «теперь это работает надежно.

Однако стоит упомянуть, что:

Установка переменной на undefined считается плохой практикой, мы вместо этого следует использовать null.

Ответы [ 12 ]

52 голосов
/ 25 января 2012

myFunction(undefined,"abc"); этот способ должен работать, в чем проблема?

см. здесь

Здесь находится неопределенная документация от mozilla, поддерживаемая всеми браузерами

13 голосов
/ 04 мая 2015

Оператор void , по-видимому, является наиболее распространенным способом явного получения undefined.

. Вы можете использовать его в своем примере следующим образом:

myFunction(void 0, "abc");

Это также надежный метод сравнения с undefined, защищенный от случайного переопределения undefined в более старых средах JavaScript:

var x;
if (x === void 0) {
    // this will execute
}
10 голосов
/ 25 января 2012

Лучшим подходом может быть передача Object с именованными атрибутами, а затем поиск этих конкретных значений атрибутов. Таким образом, вам не нужно зависеть от количества аргументов.
Пример: Object.dummy

5 голосов
/ 25 января 2012

У меня только что появилась идея, и она работает:

var undf;

myFunction(undf, "abc");

Я уверен, что есть лучшие способы, однако я выкладываю это

1 голос
/ 24 апреля 2018

Вам необходимо обработать вызов функции с неопределенной переменной в самом коде функции одним из следующих способов: -

 function myFunction (parm1, parm2) {

         if (parm1 !== undefined) {
             // execute code if 1st param is undefined
        }

         if (parm2 !== undefined) {
             // execute code if 2 param is undefined
        }

        // execute other part of code

    }

Теперь вы можете вызвать вышеуказанную функцию следующими способами: -

myFunction(undefined,"abc"); // with 1st param value not known

myFunction("cde",undefined); // with 2nd param value not known

myFunction("cde","abc");  // with both param value known
1 голос
/ 19 августа 2015

Вы можете использовать , применить и массив параметров, чтобы передать "undefined" в качестве одного из параметров.Например, вы хотели передать parm1 как «undefined»:

function myFunction (parm1, parm2) {

    if(typeof (parm1) === "undefined"){
        alert("parm1 is undefined")
    }

    if(typeof (parm2) === "undefined"){
        alert("parm2 is undefined")
    }

}

var myParameters = [undefined, "abc"];

myFunction.apply(valueForThis, myParameters );
1 голос
/ 25 января 2012

Попробуйте использовать этот метод, если вы планируете добавить неопределенное количество параметров:

function myFunc(params) {
    // Define default values
    var name = 'John';
    var age = '40';
    // You can loop through them
    for (var p in params) {
        alert(p + ':' + params[p]);
    }
    // And read them in like this
    if (typeof params.name != 'undefined') {
        name = params.name;
    }
    if (typeof params.age != 'undefined') {
        age = params.age;
    }
    alert(name + ' ' + age);
}

alert('test1');
myFunc({name:'Bob', age:'30'});
alert('test2');
myFunc({name:'Bob'});
1 голос
/ 25 января 2012

Я думаю, что самое близкое, что вы получите, это передать null в качестве параметра.Это не undefined, но в большинстве случаев это достаточно близко.

0 голосов
/ 24 ноября 2016

Просто чтобы привести примеры того, что объяснял @dbrin, и @alphapilgrim, возможно, захотел проверить.

simpleFunction({params1:12, params2:"abc"}); //use expected arguments
simpleFunction({params2:"abc"}); //use only one
simpleFunction({params2:"abc", params1:12, iDoNotExist:"I will not be included"}); //use expected arguments in any order
simpleFunction(); //ignore arguments and uses defaults
simpleFunction(2123); //ignores non object arguments 

function simpleFunction(someParams){
  var myParams = {
    params1:null,
    params2:"cde" //default value for second parameter
  };
  simpleExtend(myParams, someParams);
  
  console.log(myParams);

}


//to include in your utilities
function simpleExtend(currentParams, newParams){
  
  if(typeof currentParams !== "undefined" && typeof newParams !== "undefined"){
    Object.keys(newParams).forEach(function(key){
   
      if(typeof currentParams[key] !== "undefined"){
        currentParams[key] = newParams[key];    
      }

    });
 
  
  }
  
 

}
0 голосов
/ 22 декабря 2015

Простой способ сделать это, когда приемлемо - передать значение undefined.Но еще лучше: W3C

Javascript-пропущенные аргументы

function myFunction(x, y) {
if (y === undefined) {
      y = 0;
    } 
}
...