How to pass the value 'undefined' to a function with multiple parameters?

前端 未结 12 2182
滥情空心
滥情空心 2020-12-14 14:26

I want to pass the value of \'undefined\' on a multiple parameter function but without omitting the parameter.

What do I mean with \"without omitting the paramet

相关标签:
12条回答
  • 2020-12-14 14:35

    I think the closest you'll get to this is passing null as a parameter. It's not undefined, but for most cases it's close enough.

    0 讨论(0)
  • 2020-12-14 14:35

    myFunction(undefined,"abc") should absolutely work, unless someone cruel has redefined undefined! If you want to be safe, there are dozens of ways to get the undefined value which avoid the assumption that the thing called "undefined" does in fact have the special undefined value:

    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 is the most widely used (compiled CoffeeScript includes this wherever the undefined value is required).

    0 讨论(0)
  • 2020-12-14 14:36

    If its possible , could you rearrange the function as myFunction (parm2, parm1)

    ie. try to ensure possible undefined parameters are last in the function , this might not work if more parameters are introduced.

    0 讨论(0)
  • 2020-12-14 14:37

    The void operator seems to be the most common way to explicitly get undefined.

    You would use it like this in your example:

    myFunction(void 0, "abc");
    

    It's also a reliable method for comparing against undefined that is guarded against undefined being accidentally overridden in older JavaScript environments:

    var x;
    if (x === void 0) {
        // this will execute
    }
    
    0 讨论(0)
  • 2020-12-14 14:40

    Just to give an examples on what @dbrin was explaining, and @alphapilgrim might have wished to check.

    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 讨论(0)
  • 2020-12-14 14:41

    An easy way of doing this, when acceptable is to pass undefined. But better yet as follows per W3C

    Javascript-missing arguments

    function myFunction(x, y) {
    if (y === undefined) {
          y = 0;
        } 
    }
    
    0 讨论(0)
提交回复
热议问题