传递的参数可以是显式的“未定义”或未传递

时间:2017-10-26 15:54:49

标签: javascript

我需要关注:

function(arg) {
  if (undefined was passed explicitly)
     //case 1
  if (no parameter was passed)
    // case 2
}

这可能吗? 下一个陈述在案件之间没有区别:

typeof args === 'undefined'
args === undefined
args === null

2 个答案:

答案 0 :(得分:1)

我会做这样的事情:

function test(...args) {
  if (args.length && typeof args[0] === 'undefined') {
    console.log('explicitly undefined');
  } else {
    console.log('just undefined');
  }
}

spread运算符会将任何传递的参数扩展为数组。如果数组长度为零,则不传递任何内容,因此undefined是隐式的。如果数组长度,那么我们可以明确检查它的类型。

答案 1 :(得分:1)

  

您可以使用javascript rest or spread operator ...来定义函数参数。

function call(...args){
 if(args.length == 0)
  {
    console.log("no args passed");
  }
  else if(args[0] == undefined || args[0] == 'undefined'){
    console.log("args is undefined");
  }
  else 
  {
  console.log(args);
  }
}

call(undefined);
call('undefined');
call(null)
call(1,2,4);
call();