Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-如何检查函数中特定“索引”处的参数是否丢失?_Javascript_Arguments - Fatal编程技术网

Javascript-如何检查函数中特定“索引”处的参数是否丢失?

Javascript-如何检查函数中特定“索引”处的参数是否丢失?,javascript,arguments,Javascript,Arguments,我想根据参数是否未定义返回不同的语句。问题是,如果第二个参数丢失,第三个参数“变成”第二个参数,因此无论哪一个参数丢失,我只会点击最后一个else if语句,该语句只应在最后一个参数丢失时应用。我已经研究过了,但找不到解决办法。我试着用 var array=Array.prototype.slice.call(arguments); 然后检查数组[0]、数组[1]和数组[2],但这也不起作用,因为我总是得到“c不存在” 任何帮助都将不胜感激。多谢各位 function testing(a,

我想根据参数是否未定义返回不同的语句。问题是,如果第二个参数丢失,第三个参数“变成”第二个参数,因此无论哪一个参数丢失,我只会点击最后一个else if语句,该语句只应在最后一个参数丢失时应用。我已经研究过了,但找不到解决办法。我试着用

var array=Array.prototype.slice.call(arguments); 
然后检查数组[0]、数组[1]和数组[2],但这也不起作用,因为我总是得到“c不存在” 任何帮助都将不胜感激。多谢各位

function testing(a, b, c) {
    if (a === undefined) {
        return 'a doesnt exist'
    } else if (b === undefined) {
        return 'b doesnt exist'
    } else if (c === undefined) {
        return 'c doesnt exist'
    }
}

testing(3, 'name')

如果调用方仅使用两个参数调用函数,则您不知道缺少的是第二个参数还是第三个参数,除非您可以从所需的类型推断出它。例如,如果您希望b是一个数字,c是一个函数,那么:

if (typeof b === "function") {
    // `b` was omitted (effectively)
    c = b;
    b = undefined;
}
但是如果您希望b和c使用相同类型的参数,或者您允许它们使用任何类型的参数,那么您无法知道调用方只提供两个参数是指提供a和b还是a和c

在这种情况下,您必须对函数进行文档化,说明如果您想要有效地去掉b,您需要为它提供未定义的:testing1,undefined,3;这样做可以很好地利用ES2015的默认参数,而完全忽略它则不行

接受复杂参数组合的另一种方法是接受对象而不是离散参数:

功能测试选项{ console.loga:,options.a; console.logb:,options.b; console.logc:,options.c; } //用法
测试{a:1,c:3} 如果调用方仅使用两个参数调用函数,则您不知道缺少的是第二个参数还是第三个参数,除非您可以从所需的类型推断出它。例如,如果您希望b是一个数字,c是一个函数,那么:

if (typeof b === "function") {
    // `b` was omitted (effectively)
    c = b;
    b = undefined;
}
但是如果您希望b和c使用相同类型的参数,或者您允许它们使用任何类型的参数,那么您无法知道调用方只提供两个参数是指提供a和b还是a和c

在这种情况下,您必须对函数进行文档化,说明如果您想要有效地去掉b,您需要为它提供未定义的:testing1,undefined,3;这样做可以很好地利用ES2015的默认参数,而完全忽略它则不行

接受复杂参数组合的另一种方法是接受对象而不是离散参数:

功能测试选项{ console.loga:,options.a; console.logb:,options.b; console.logc:,options.c; } //用法
测试{a:1,c:3} 或者确保使用所有三个参数调用函数,例如:

testing(3, undefined, 'name');

或者确保使用所有三个参数调用函数,例如:

testing(3, undefined, 'name');