繁体   English   中英

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

[英]Javascript - How to check if argument in function at specific 'index' is missing?

我想根据参数是否未定义返回不同的语句。 问题是,如果让我们说第二个参数丢失,则第三个参数“成为”第二个参数,因此无论缺少哪个参数,我都只命中最后一个 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;
}

但是,如果您期望bc使用相同类型的参数,或者您允许它们使用任何类型,那么您将无法知道仅提供两个参数的调用者是否意味着提供aba and c

在这种情况下,您必须记录函数以说明如果您想(有效地)离开b ,您需要为其提供undefinedtesting(1, undefined, 3); (这样做可以很好地与 ES2015 的默认参数配合使用,而完全忽略它则不然。)

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

 function testing(options) { console.log("a:", options.a); console.log("b:", options.b); console.log("c:", options.c); } // Usage testing({a: 1, c: 3});

如果你这样做了,并且如果你可以使用 ES2015(又名“ES6”)特性(例如,你只针对尖端浏览器,或者你正在转译),你可以使用参数解构来让它们自动映射到你的参数:

 function testing({a, b, c}) { console.log("a:", a); console.log("b:", b); console.log("c:", c); } // Usage testing({a: 1, c: 3});

您甚至可以将其与默认参数值结合使用:

 function testing({a = 1, b = 2, c = 3}) { console.log("a:", a); console.log("b:", b); console.log("c:", c); } // Usage testing({a: 1, c: 3});

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

testing(3, undefined, 'name');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM