以优雅的方式检查多个参数的存在
checking the existence of multiple arguments in an elegant manner
我有一个这样的函数-
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个论点都存在。
这看起来很难看,无法阅读。你能建议一种更优雅的方式来实现同样的目标吗?
可以使用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
}
}
您可以使用arguments.length
来获取实际传递的参数数。
arguments
是一个"类数组"的内置程序。如果您想测试参数是否有值,只需像测试任何数组一样对其进行循环即可。(当然,您可能会认为来自框架的"查询"方法更优雅,但最终是某人的循环。)
每个函数都可以访问arguments
伪数组,该数组包含传入的所有参数。
如果你想确保你有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上没有看到它)
var myFunction= function(){
var i= 7, a= arguments;
while(i){
if(a[--i]== undefined) return new Error('Expected 7 arguments')
}
return a.length;
//the first 7 arguments are not null or undefined
// they could be false, '', 0 or NaN
}
myFunction(1, 2, 3, 4, 5, '', 7)
/* returned value: (Number)
7
*/
myFunction(1, 2, 3, 4, 5, null, 7)
/* returned value: (Error)
Error: Expected 7 arguments
*/
相关文章:
- 测试mongo脚本中是否存在参数
- 如何添加函数中存在的所有参数
- 无法在“RTCPeerConnection”上执行“createOffer”:需要 2 个参数,但只有 0 个参数存在
- 存在其他参数时访问Javascript事件
- 是否存在用于解析 URL 路径段(矩阵)参数的 JavaScript 库
- jQuery脚本,它搜索现有的查询参数并且不添加“"如果存在
- 未捕获的类型错误:无法在“CSSStyleSheet”上执行“插入规则”:需要 2 个参数,但仅存在 1 个参数
- 将函数作为 Javascript 中可能尚不存在的参数传递
- 有没有办法确定角度.js是否存在 url 查询参数
- 如何在 JavaScript 中传递参数,确保它的引用存在
- Rails 输入表单填充了 jQuery .val(),但参数中不存在数据
- 名称参数在 JQUERY 方法的当前上下文中不存在
- JavaScript 参数在当前上下文中不存在
- JavaScript 中是否存在没有足够的参数这样的事情?为什么
- 检查函数参数是否存在,并在JavaScript中键入
- 将会话ID/密钥作为请求参数传递时存在安全风险
- 简单`replace()`的第二个参数存在问题
- Hapijs和Joi:验证存在的查询参数:'禁止'
- 以优雅的方式检查多个参数的存在
- 仅当URL参数存在时显示HTML内容