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中 声明时用"var"与不用"var"的区别
Apr 15 Javascript
php与js的区别是什么
Aug 05 Javascript
javaScript arguments 对象使用介绍
Oct 18 Javascript
js操作iframe父子窗体示例
May 22 Javascript
JS动态修改图片的URL(src)的方法
Apr 01 Javascript
JavaScript实现图片轮播的方法
Jul 31 Javascript
浏览器兼容性问题大汇总
Dec 17 Javascript
easyui form validate总是返回false的原因及解决方法
Nov 07 Javascript
JS实现的3des+base64加密解密算法完整示例
May 18 Javascript
js实现倒计时器自定义时间和暂停
Feb 25 Javascript
Ajax实现页面无刷新留言效果
Mar 24 Javascript
详解Vue router路由
Nov 20 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
php操作excel文件 基于phpexcel
2010/07/02 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
php伪静态之APACHE篇
2014/06/02 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
JS实现div居中示例
2014/04/17 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
python机器学习库常用汇总
2017/11/15 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
上班离岗检讨书
2014/01/27 职场文书
租房协议书范例
2014/10/14 职场文书
财务会计求职信范文
2015/03/20 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang