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代码
Aug 13 Javascript
JS操作CSS随机改变网页背景实现思路
Mar 10 Javascript
javascript中通过arguments参数伪装方法重载
Oct 08 Javascript
浅谈javascript中createElement事件
Dec 05 Javascript
jQuery制作仿Mac Lion OS滚动条效果
Feb 10 Javascript
基于javascript实现根据身份证号码识别性别和年龄
Jan 22 Javascript
基于bootstrap风格的弹框插件
Dec 28 Javascript
react native实现往服务器上传网络图片的实例
Aug 07 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
Dec 29 Javascript
node.js中fs文件系统目录操作与文件信息操作
Feb 24 Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
Nov 06 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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
PHP 采集程序原理分析篇
2010/03/05 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
一个javascript参数的小问题
2008/03/02 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
json的使用小结
2016/06/08 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
深入理解NumPy简明教程---数组2
2016/12/17 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
Python Django基础二之URL路由系统
2019/07/18 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
走进敬老院活动总结
2014/07/10 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
2015年社区工作总结
2015/04/08 职场文书
罗马假日观后感
2015/06/08 职场文书
vue首次渲染全过程
2021/04/21 Vue.js