专栏首页菩提树下的杨过javascript中function调用时的参数检测常用办法

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 + "," + 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))

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ruby学习笔记(1)--初识语法

    虽然ruby/ruby on rails从2007年就一直获奖无数,但身为一个中国人,一直对小日本创造的东西不怎么感兴趣,想想其实也没必要,技术本身是无国界的,...

    菩提树下的杨过
  • 利用peerjs轻松玩转webrtc

     随着5G技术的推广,可以预见在不久的将来网速将得到极大提升,实时音视频互动这类对网络传输质量要求较高的应用将是最直接的受益者。而且伴随着webrtc技术的成熟...

    菩提树下的杨过
  • Linq to Sql中Single写法不当可能引起的数据库查询性能低下

    场景:需要从T_User表中返回指字条件的某条记录的某一个字段 在Linq中有二种理论上都行得通的写法,见下面的代码: Code using (dbUserDa...

    菩提树下的杨过
  • 笔试题一道

    //给定一个8x8的棋盘(二维数组),放入若干个车(1),检查这些车是否相互攻击,若互相攻击,输出true //0 1 0 0 0 0 0 0 //0 0 ...

    用户7962184
  • Java实现回文判断

    崔笑颜
  • 移动直播LiteAVSDK,拉流事件回调onPlayEvent()

    您可以为 LivePusher 对象绑定一个TXLivePushListener,之后 SDK 的内部推流状态信息均会通过 onPushEvent(事件通知) ...

    腾讯云-chaoli
  • 把表单转成json,并且name为key,value为值

    http://jsfiddle.net/sxGtM/3/ http://stackoverflow.com/questions/1184624/convert-...

    庞小明
  • JS中判断null、undefined与NaN的方法

    写了个 str ="s"++;  然后出现Nan,找了一会。  收集资料如下判断: 1.判断undefined: 1 2 3 4 va...

    庞小明
  • 《Love and Math》

    Peter Lu
  • nodejs添加jsonwebtoken验证

    使用compression压缩处理请求响应、cors模块添加跨域、helmet安全模块、body-parser解析请求参数、jsonwebtoken用于生成及校...

    用户1141560

扫码关注云+社区

领取腾讯云代金券