[英]How to check if argument is defined in function definition in 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;
}
但是,如果您期望b
和c
使用相同类型的参数,或者您允许它们使用任何类型,那么您将无法知道仅提供两个参数的调用者是否意味着提供a
和b
或a
and c
。
在这种情况下,您必须记录函数以说明如果您想(有效地)离开b
,您需要为其提供undefined
: testing(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.