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 Cookie读写删除操作的函数
Mar 02 Javascript
js multiple全选与取消全选实现代码
Dec 04 Javascript
利用jQuery实现可输入搜索文字的下拉框
Oct 23 Javascript
jQuery操作元素css样式的三种方法
Jun 04 Javascript
前端必备神器 Snap.svg 弹动效果
Nov 10 Javascript
JavaScript获得页面base标签中url的方法
Apr 03 Javascript
JavaScript 表单处理实现代码
Apr 13 Javascript
JavaScript实现网页对象拖放功能的方法
Apr 15 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
Dec 08 Javascript
Vue中封装input组件的实例详解
Oct 17 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
Jun 27 Javascript
小程序日历控件使用方法详解
Dec 29 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下正则来匹配dede模板标签的代码
2010/08/21 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
php中如何执行linux命令详解
2018/11/06 PHP
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python 文件操作api(文件操作函数)
2016/08/28 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
Python用for循环实现九九乘法表
2018/05/31 Python
Python实现FTP文件传输的实例
2019/07/07 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
Python中拆分字符串的操作方法
2019/07/23 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
竞聘演讲稿
2014/04/24 职场文书
个人主要事迹材料
2014/08/26 职场文书
公司授权委托书样本
2014/09/15 职场文书
2015年环卫工作总结
2015/04/28 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
Feign调用传输文件异常的解决
2021/06/24 Java/Android
一文搞懂Redis中String数据类型
2022/04/03 Redis