Подтвердить что ты не робот

Как передать значение 'undefined' функции с несколькими параметрами?

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

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

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

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

Итак, в случае, когда я хочу сделать parm1 undefined, но также хочу иметь другие параметры после этого, чтобы сохранить значение, не будет работать с предыдущим методом.

Я пробовал с:

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

И

myFunction(undefined,"abc"); //neither work
4b9b3361

Ответ 1

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

Ответ 2

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

см. здесь

Вот undefined документация из mozilla, поддерживаемая всеми браузерами

Ответ 3

Оператор void кажется наиболее распространенным способом явно получить undefined.

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

myFunction(void 0, "abc");

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

var x;
if (x === void 0) {
    // this will execute
}

Ответ 4

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

var undf;

myFunction(undf, "abc");

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

Ответ 5

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

Ответ 6

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

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'});

Ответ 7

Вы можете использовать apply и массив параметров для передачи "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 );

Ответ 8

myFunction(undefined,"abc") должен полностью работать, если только кто-то жестоко не изменил undefined! Если вы хотите быть в безопасности, есть десятки способов получить значение undefined, которое позволяет избежать предположения, что вещь, называемая "undefined", действительно имеет специальное значение undefined:

void 0
var undef; undef
[][0]
{}.foo
// `undef` is guaranteed to have the undefined value within this closure
(function(undef){ undef }())
// this expression evaluates as undefined
(function(){}())

void 0 является наиболее широко используемым (скомпилированный CoffeeScript включает это везде, где требуется значение undefined).

Ответ 9

Если возможно, вы могли бы изменить функцию как myFunction (parm2, parm1)

т. попробуйте обеспечить, чтобы в параметре были использованы параметры undefined, это может не сработать, если ввести больше параметров.

Ответ 11

Просто чтобы привести примеры того, что объяснял @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];    
      }

    });
 
  
  }
  
 

}