【思考】函数参数检测

起因:代码review中暴露出的一个突出严重的问题–函数参数缺少检测。故找同事讨论一下这个小小话题。下面是我从讨论中总结出的点。

1、那么首先为什么要做函数参数的检测呢?

让js代码更健壮!

2、函数参数的检测是必须的吗?

严格的来讲是建议任何只要有参数的地方就需要检测,理由:任何的输入操作都是不可靠的,尤其是对javascript这种弱类型的语言来说。
简单来做呢,供外部调用的接口参数进行检测很必要,因为不能确保外部怎么用;内部的方法参数可以按约定,省略检测,可以提高一些性能。

3、然后,该怎么做呢?从哪方面着手呢?

对参数的存在性和类型检测的检测是基础。参数个数的检测根据代码逻辑来判断是否加以检测,与代码设计相关,不是必须要做的。
存在性和类型的检测可以通过,如下:

?
1
2
3
if (param && typeof param == 'xxx' ){
 
}

一些js框架提供一些api来检测,如:KISSY 的 isObject()、isArray()等,jQuery的isFunction()、isPlainObject()等。
参数个数,通过函数的arguments.lenght来获得实际传入函数的参数个数。函数的形参个数可以通过函数的length属性获得(arguments.callee.length)。例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function check(args) {
     var actual = args.length,           //the actual number of arguments
         expected = args.callee.length;  //the expected number of arguments
     if (actual != expected) {    //throw an exception if they do not match
         thow new Error( 'wrong number of arguments: expected: ' + expected + '; actually passed ' + actual);
     }
}
 
function f(x, y, z) {
     //check that the actual # of args matches the expected # of args
     //thow an exception if they do not match
     check(arguments);
     //now do the reset of the function normally
     return x + y + z;
}
4、接下来处理检测结果,此处阐述检测出错的处理。

出错后一般会return false,但建议在返回前多做一步,打log。log帮助调用函数的使用者,知道哪里出错,帮助快速定位问题。KISSY的debug模式在开启的情况下输出日志,这种处理也不错。

大家有什么观点、想法,欢迎评论~! :!:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值