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

复制代码 代码如下:

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))

时间: 2024-07-31 11:07:14

javascript function调用时的参数检测常用办法_javascript技巧的相关文章

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

1.方法重载 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 + &qu

在JavaScript中调用Java类和接口的方法_javascript技巧

前言 本文中所有的代码使用 JavaScript 编写,但你也可以用其他兼容 JSR 223 的脚本语言.这些例子可作为脚本文件也可以在交互式 Shell 中一次运行一个语句的方式来运行.在 JavaScript 中访问对象的属性和方法的语法与 Java 语言相同. 本文包含如下几部分: 1.访问 Java 类 为了在 JavaScript 中访问原生类型或者引用 Java 类型,可以调用 Java.type() 函数,该函数根据传入的完整类名返回对应对象的类型.下面代码显示如何获取不同的对象类

JavaScript 异步调用框架 (Part 1 - 问题 & 场景)_javascript技巧

问题 在Ajax应用中,调用XMLHttpRequest是很常见的情况.特别是以客户端为中心的Ajax应用,各种需要从服务器端获取数据的操作都通过XHR异步调用完成.然而在单线程的JavaScript编程中,XHR异步调用的代码风格实在是与一般的JavaScript代码格格不入. 额外参数 考虑一个除法函数,如果它是纯客户端的同步函数,那么签名会是这样的: function divide(operand1, operand2) 然而假设我们对客户端除法的精度不满意,于是把除法转移到服务器端来执行

JavaScript 异步调用框架 (Part 5 - 链式实现)_javascript技巧

调用入口 链式调用存在Async.go方法和Async.chain方法两个入口,这两个入口本质上是一致的,只是Async.chain方法在调用时先不提供初始参数,而Async.go方法在调用时提供了初始参数并启动异步调用链. 复制代码 代码如下: Async.chain = function() { var chain = new Async.Operation({ chain: true }); return chain; }; Async.go = function(initialArgum

使用JavaScript获取URL中的参数(两种方法)_javascript技巧

本文给大家分享两种方法使用js获取url中的参数,其中方法二是使用的正则表达式方法,大家可以根据需要选择比较好的方法,废话不多说了,直接看详细介绍吧. 方法一: //取url参数 var type = request("type") function request() { var query = location.search; var paras = arguments[0]; if (arguments.length == 2) { query = arguments[1]; }

javascript将url中的参数加密解密代码_javascript技巧

今天在做一个老项目时,遇到一个需求,在javascript将url中的参数加密解密,从网上找发现了这段有用的代码: 复制代码 代码如下: <SCRIPT LANGUAGE="JavaScript">    <!-- Begin    function Encrypt(str, pwd) {        if(str=="")return "";        str = escape(str);        if(!pwd

JavaScript 异步调用框架 (Part 2 - 用例设计)_javascript技巧

传递回调 我们首先要考虑的一个问题是,如何传递回调入口.在最传统的XHR调用当中,回调函数会被作为最后一个参数传递给异步函数: 复制代码 代码如下: function asyncOperation(argument, callback) 在参数相当多的时候,我们可以把参数放到一个JSON里面,这样参数就如同具名参数一样,可以通过参数名选择性的传递参数,不传递的参数相当于使用默认值.这是从Prototype开始就流行起来的做法: 复制代码 代码如下: function asyncOperation

JavaScript 异步调用框架 (Part 6 - 实例 &amp;amp; 模式)_javascript技巧

封装Ajax 设计Async.Operation的最初目的就是解决Ajax调用需要传递callback参数的问题,为此我们先把Ajax请求封装为Async.Operation.我在这里使用的是jQuery,当然无论你用什么基础库,在使用Async.Operation时都可以做这种简单的封装. 复制代码 代码如下: var Ajax = {}; Ajax.get = function(url, data) { var operation = new Async.Operation(); $.get

JavaScript 异步调用框架 (Part 4 - 链式调用)_javascript技巧

现实开发中,要按顺序执行一系列的同步异步操作又是很常见的.还是用百度Hi网页版中的例子,我们先要异步获取联系人列表,然后再异步获取每一个联系人的具体信息,而且后者是分页获取的,每次请求发送10个联系人的名称然后取回对应的具体信息.这就是多个需要顺序执行的异步请求. 为此,我们需要设计一种新的操作方式来优化代码可读性,让顺序异步操作代码看起来和传统的顺序同步操作代码一样优雅. 传统做法 大多数程序员都能够很好的理解顺序执行的代码,例如这样子的: 复制代码 代码如下: var firstResult