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 相关文章推荐
Mozilla 表达式 __noSuchMethod__
Apr 05 Javascript
调用js时ie6和ie7,ff的区别
Aug 19 Javascript
JS 文件本身编码转换 图文教程
Oct 12 Javascript
javascript 图片裁剪技巧解读
Nov 15 Javascript
appendChild() 或 insertBefore()使用与区别介绍
Oct 11 Javascript
javascript实现倒计时N秒后网页自动跳转代码
Dec 11 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
JavaScript设计模式之单例模式简单实例教程
Jul 02 Javascript
vuex实现数据状态持久化
Nov 11 Javascript
vue跳转页面的几种方法(推荐)
Mar 26 Javascript
浅谈Vue 自动化部署打包上线
Jun 14 Javascript
Vue如何实现组件间通信
May 15 Vue.js
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
是否存在第一台收音机的说法
2021/03/01 无线电
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
webpack4 升级迁移的实现
2018/09/12 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
JS实现多选框的操作
2020/06/24 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
简单的Python抓taobao图片爬虫
2014/10/26 Python
Python3.6简单反射操作示例
2018/06/14 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
迪奥官网:Dior.com
2018/12/04 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
中专毕业生自我鉴定
2014/02/02 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
感谢信的格式
2015/01/21 职场文书