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 相关文章推荐
js中关于String对象的replace使用详解
May 24 Javascript
jQuery对象与DOM对象之间的相互转换
Mar 03 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
Jan 27 Javascript
jQuery图片左右滚动代码 有左右按钮实例
Jun 20 Javascript
JS锚点的设置与使用方法
Sep 05 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
Nov 09 Javascript
jQuery+HTML5实现弹出创意搜索框层
Dec 29 Javascript
基于jQuery封装的分页组件
Jun 26 jQuery
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
vue组件watch属性实例讲解
Nov 07 Javascript
vue中element 上传功能的实现思路
Jul 06 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
Nov 05 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面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
php文档更新介绍
2011/07/22 PHP
深入php define()函数以及defined()函数的用法详解
2013/06/05 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
python海龟绘图实例教程
2014/07/24 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
python实现人工蜂群算法
2020/09/18 Python
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
战友聚会邀请函
2014/01/18 职场文书
小学教师师德感言
2014/02/10 职场文书
普宁寺导游词
2015/02/04 职场文书
总经理年会致辞
2015/07/29 职场文书
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP