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

简介: 1.方法重载 js中并不直接支持类似c#的方法重载,所以只能变相的来解决,示意代码:(利用了内置属性arguments) var f1 = function(p1,p2,p3){ switch(arguments.

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 + "," + 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){
	//if (arguments.length==1 && p.constructor == Person) //也可以写成这样
		alert("fnPerson调用成功,p.name=" + p.name + ",p.age=" + p.age);
	}
	else{					
		alert("必须传入一个Person类型的参数才能调用!");
	}
}

fnPerson("asdf");
fnPerson(new Person('菩提树下的杨过',30))
目录
相关文章
|
存储 JavaScript 对象存储
js检测数据类型有那些方法
js检测数据类型有那些方法
412 59
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
1097 159
|
JSON C# 数据格式
【Azure Function】C#独立工作模式下参数类型 ServiceBusReceivedMessage 无法正常工作
Cannot convert input parameter 'message' to type 'Azure.Messaging.ServiceBus.ServiceBusReceivedMessage' from type 'System.String'.
348 73
|
编解码 前端开发 JavaScript
javascript检测网页缩放演示代码
javascript检测网页缩放演示代码
|
前端开发
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
【Azure 应用服务】Azure Function 部署槽交换时,一不小心把预生产槽上的配置参数交换到生产槽上,引发生产错误
【Azure 应用服务】Azure Function 部署槽交换时,一不小心把预生产槽上的配置参数交换到生产槽上,引发生产错误
159 0
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
460 63
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
1881 9
|
JavaScript 前端开发
JavaScript基础知识-函数的参数
关于JavaScript函数参数基础知识的介绍。
201 4
JavaScript基础知识-函数的参数
|
监控 JavaScript 前端开发
如何检测和解决 JavaScript 中内存泄漏问题
【10月更文挑战第25天】解决内存泄漏问题需要对代码有深入的理解和细致的排查。同时,不断优化和改进代码的结构和逻辑也是预防内存泄漏的重要措施。
488 6