javascript function调用时的参数检测常用办法


Posted in Javascript onFebruary 26, 2010
var f1 = function(p1,p2,p3){ 
    switch(arguments.length){ 
        case 0: 
            alert("无参版本的f1") 
            break; 
        case 1: 
            alert("1个参数版本的f1:" + p1) 
            break; 
        case 2: 
            alert("2个参数版本的f1:" + p1 + "," + p2) 
            break; 
        case 3: 
            alert("3个参数版本的f1:" + p1 + "," + p2 + "," + p3) 
            break; 
        default: 
            alert("不支持多于3个参数的调用!"); 
            break; 
    } 
} 
f1(); 
f1("1"); 
f1("a",100); 
f1("1","2","3"); 
f1("1","2","3","4")

2.参数个数检测
js引擎同样也不会在function调用时,强制检查参数个数,所以只能自己处理,示例代码:
var fnMustOneParam = function(p){     //检测有没有参数传入 
    if (typeof p=="undefined"){ 
        alert("fnMustOneParam必须要有参数传入,才能调用(1)!"); 
        return ; 
    } 
    //也可以写成这样 
    if (arguments.length==0){ 
        alert("fnMustOneParam必须要有参数传入,才能调用(2)!"); 
        return; 
    } 
    //检测参数个数 
    if (arguments.length!=0){ 
        alert("fnMustOneParam只能传入一个参数调用!"); 
        return; 
    } 
    //to do... 
} 
//fnMustOneParam(1,3,4);

3.参数基本类型检测
js引擎同样更不会检测参数的类型,如果您希望对参数的基本类型做些限制,可以利用typeof 来判断基本类型
var fnString = function(s){ 
    if (arguments.length!=1){ 
        alert("参数个数不匹配!"); 
        return ; 
    } 
    if (typeof s != "string"){ 
        alert("只能传入string类型的参数!"); 
        return ; 
    } } 
//fnString(123);

4.自定义类的参数类型检测
第3条所提到的方法,只能检测参数的基本类型,如果是自定义类的参数,如果用typeof运算符号,只能得到object的类型检测结果,这时可利用instanceof运算符号来解决
function Person(name,age){ 
    this.name = name; 
    this.age = age; 
} 
function fnPerson(p){ 
    if (arguments.length=1 && p instanceof Person){ 
        alert("fnPerson调用成功,p.name=" + p.name + ",p.age=" + p.age); 
    } 
    else{                     
        alert("必须传入一个Person类型的参数才能调用!"); 
    } 
} 
fnPerson("asdf"); 
fnPerson(new Person('菩提树下的杨过',30))
Javascript 相关文章推荐
JavaScript词法作用域与调用对象深入理解
Nov 29 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
Feb 22 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
ActiveX控件与Javascript之间的交互示例
Jun 04 Javascript
JavaScript中调用函数的4种方式代码实例
Jul 08 Javascript
使用jQuery监听DOM元素大小变化
Feb 24 Javascript
js表单元素checked、radio被选中的几种方法(详解)
Aug 22 Javascript
微信小程序 开发指南详解
Sep 27 Javascript
自学实现angularjs依赖注入
Dec 20 Javascript
聊聊鉴权那些事(推荐)
Aug 22 Javascript
微信小程序 自定义复选框实现代码实例
Sep 04 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
Sep 08 Javascript
jquery1.4 教程二 ajax方法的改进
Feb 25 #Javascript
jquery 1.4.2发布!主要是性能与API
Feb 25 #Javascript
jQuery 方法大全方便学习参考
Feb 25 #Javascript
js 面向对象的技术创建高级 Web 应用程序
Feb 25 #Javascript
javascript 命名规则 变量命名规则
Feb 25 #Javascript
javascript for循环设法提高性能
Feb 24 #Javascript
判断控件是否已加载完成的代码
Feb 24 #Javascript
You might like
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
python逐行读取文件内容的三种方法
2014/01/20 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
请解释在new与override的区别
2012/10/29 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
医药类个人求职的自我评价
2014/02/12 职场文书
保险经纪人求职信
2014/03/11 职场文书
校庆接待方案
2014/03/18 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
高考学习决心书
2015/02/04 职场文书
网络销售员岗位职责
2015/04/11 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
单身证明范本
2015/06/15 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
php 原生分页
2021/04/01 PHP
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers