javasctript的类型检查一般有两种方法,第一种方法是使用显而易见的typeof操作符,这种方式提供了一个字符串名称,用于表达变量内容的类型。当变量不是object或者array类型时,这应该算是最完美的解决方法了。但是对于自定义对象,比如user就不能用这个方法进行类型检查,因为它只会返回object,很难和其他object区分开。这种方法的例子如下:
?
?
function sendMessage(msg,obj){ if(arguments.length==2){ alert(msg); }else{ alert('faile'); } } function displayerror(msg){ if(typeof msg=="undefined"){ msg="An error occurred" }else if(typeof msg == 'string'){ msg="Hello JavaScript"; } alert(msg);} displayerror(); displayerror("xixi"); sendMessage('Hello',new Object());?
第二种检查对象类型的方法,需要引用所有JavaScript对象都带有的一个属性,称为构造函数(construction)。这一属性引用的是原本用来构造对象的那个函数。这种方法的列子(这是一个判断参数类型的例子)如下:
?
function strict(types,args){ if(types.length != args.length){ document.write("类型数量和参数个数不相等!!"); return; } for(var i=0;i<types.length;i++){ if(types[i] != args[i].constructor){ document.write("第"+(i+1)+"个参数类型不正确"); return; } } } function userList(prefix,num,users){ strict([String,Number,Array],arguments); for(var i=0;i<num;i++){ document.write(users[i].name + "==" + users[i].age); document.write("<====>"); } } userList("introduction:",'1',[{"name":"zhangsan","age":23},{"name":"lisi","age":32}]);?
?
两种不同方法的检查结果,如下:
?????
很明显,把变量的构造函数作为对象类型的引用可能是最不容易犯错误的(undefined没有试验过)的合法类型检查了,严格的类型检查可以帮助我们判断传入的参数是否有正确的数量和正确的类型。