Javascript 以优雅的方式检查多个参数的存在性

Javascript 以优雅的方式检查多个参数的存在性,javascript,function,methods,Javascript,Function,Methods,我有一个函数是这样的- var myFunction = function(arg1, arg2, arg3, arg4, arg5, arg6, arg7){ if(typeof arg1 != 'undefined' && typeof arg2 attributeId != 'undefined' && typeof arg3 != 'undefined'){ //and so on for all the arguments //do s

我有一个函数是这样的-

var myFunction  = function(arg1, arg2, arg3, arg4, arg5, arg6, arg7){
    if(typeof arg1 != 'undefined' && typeof arg2 attributeId != 'undefined' && typeof arg3 != 'undefined'){ //and so on for all the arguments
    //do something with all of the arguments
    }
}
基本上,在做某事之前,我会检查是否所有7个参数都存在


这看起来很难看,无法阅读。您能推荐一种更优雅的方法来实现同样的目标吗?

您可以使用
参数.length
来获得实际传递的参数数量


参数
是一个“类似数组”的内置参数。如果您想测试参数是否有值,只需像在任何数组中一样循环它。(当然,您可能认为来自框架的“查询”方法更优雅,但最终是某人的循环。)

您可以使用
参数.length
获取实际传递的参数数量


参数
是一个“类似数组”的内置参数。如果您想测试参数是否有值,只需像在任何数组中一样循环它。(当然,您可能认为来自框架的“查询”方法更优雅,但最终是某人的循环。)

可以使用
arguments
变量来确定传递了多少个参数

if (arguments.length !== 7) {
  ...
}
但是,这仍然不会告诉您所有这些都是定义的值。为了确定它们是否全部被定义,你必须单独检查它们,因为它是合法的,以便在参数列表

中间未定义的传递。
myFunction(1, 2, undefined, 4, 5, 6, 7);
也许最好的方法是将其抽象为一个单独的函数

var allDefined = function(args) {
  var i = 0;
  for (i = 0; i < args.length; i++) {
    if (typeof args[i] === 'undefined') {
      return false;
    }
  }
  return true;
}

var myFunction  = function(arg1, arg2, arg3, arg4, arg5, arg6, arg7) {
  if (arguments.length === 7 && allDefined(arguments)) {
    // They're all there
  }
}
var allDefined=函数(args){
var i=0;
对于(i=0;i
可以使用
arguments
变量来确定传递了多少个参数

if (arguments.length !== 7) {
  ...
}
但是,这仍然不会告诉您所有这些都是定义的值。为了确定它们是否全部被定义,你必须单独检查它们,因为它是合法的,以便在参数列表

中间未定义的传递。
myFunction(1, 2, undefined, 4, 5, 6, 7);
也许最好的方法是将其抽象为一个单独的函数

var allDefined = function(args) {
  var i = 0;
  for (i = 0; i < args.length; i++) {
    if (typeof args[i] === 'undefined') {
      return false;
    }
  }
  return true;
}

var myFunction  = function(arg1, arg2, arg3, arg4, arg5, arg6, arg7) {
  if (arguments.length === 7 && allDefined(arguments)) {
    // They're all there
  }
}
var allDefined=函数(args){
var i=0;
对于(i=0;i
每个函数都可以访问
参数
伪数组,伪数组包含传入的所有参数

如果要确保有7个非空参数,则检查如下所示:

if (arguments.length != 7 || ![].slice.call(arguments, 0, 7).every(
       function(val) { return val != null; })) {

       alert("Please pass 7 good arguments");
       return;
}


(为了支持较旧的浏览器,您需要为
each
方法获取一个垫片,由于某种原因,我在MDN上没有看到该垫片)

每个函数都可以访问
参数
伪数组,该数组包含传入的所有参数

如果要确保有7个非空参数,则检查如下所示:

if (arguments.length != 7 || ![].slice.call(arguments, 0, 7).every(
       function(val) { return val != null; })) {

       alert("Please pass 7 good arguments");
       return;
}

(为了支持较旧的浏览器,您需要为
every
方法获取一个垫片,出于某种原因,我在MDN上没有看到)