javascript function调用时的参数检测常用办法

 更新时间:2010年02月26日 13:29:43   作者:  
js中并不直接支持类似c#的方法重载,所以只能变相的来解决,示意代码:(利用了内置属性arguments)
复制代码 代码如下:

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给数组添加元素的6个方法

    JavaScript给数组添加元素的6个方法

    本文主要介绍了JavaScript给数组添加元素的6个方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • JS中图片压缩的方法小结

    JS中图片压缩的方法小结

    这篇文章主要介绍了JS中图片压缩的方法,包括等比压缩图片的方法,需要的朋友可以参考下
    2017-11-11
  • 浅谈js常用内置方法和对象

    浅谈js常用内置方法和对象

    下面小编就为大家带来一篇浅谈js常用内置方法和对象。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • js根据后缀判断文件文件类型的代码

    js根据后缀判断文件文件类型的代码

    这篇文章主要介绍了js根据后缀判断文件文件类型的代码,原来是获取文件的扩展名然后再判断属于什么类型,对于图片多个后缀的判断的实现也不是不错的思路,大家可以参考一下
    2020-05-05
  • typescript编写微信小程序创建项目的方法

    typescript编写微信小程序创建项目的方法

    这篇文章主要介绍了typescript编写微信小程序创建项目的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 微信小程序组件化开发的示例介绍

    微信小程序组件化开发的示例介绍

    虽然小程序在刚推出时是不支持组件化的,但如今小程序开始支持自定义组件开发,下面这篇文章主要给大家介绍了关于微信小程序组件化开发的相关资料,需要的朋友可以参考下
    2023-03-03
  • js跑步算法的实现代码

    js跑步算法的实现代码

    这篇文章主要是对js跑步算法的实现代码进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • JS遍历Json字符串中键值对先转成JSON对象再遍历

    JS遍历Json字符串中键值对先转成JSON对象再遍历

    这篇文章主要介绍了JS遍历Json字符串中键值对的方法,先将Json字符串转换成JSON对象,再进行遍历,需要的朋友可以参考下
    2014-08-08
  • three.js利用gpu选取物体并计算交点位置的方法示例

    three.js利用gpu选取物体并计算交点位置的方法示例

    这篇文章主要给大家介绍了关于three.js利用gpu选取物体并计算交点位置的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用three.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • 小程序开发之模态框组件封装

    小程序开发之模态框组件封装

    这篇文章主要为大家详细介绍了小程序开发之模态框组件封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论