首页>>前端>>JavaScript->JavaScript:孔乙己的类型判断

JavaScript:孔乙己的类型判断

时间:2023-11-29 本站 点击:0

什么是孔乙己?

最经典的孔乙己当然是出自鲁迅先生的小说《孔乙己》了,而最令人记忆犹新的片段大概就是孔乙己抓着小孩子考校他们“回”字有几种写法的这一幕了。

今天,这篇文章也来还原下这一片段。

不过主题可不是“回”字的写法,而是JS中能做的类型判断有多少。

你可能会觉得这和“回”字的写法没啥区别,可你还没看完呢,先别妄下结论。

基本类型与引用类型

常见的基本类型:Number,String,Boolean,Undefined,Null,Symbol;

引用类型:Object,Array,Function;

引用类型,我们通常会仅提及Object和Array, 类似Function等其他引用类型因为很少会做类型判断,所以多数时候也不会纳入函数中作为常用类型进行判断。

而今天,我们要做的就是,做个全盘的类型判断。

通常我们进行类型判断时,常用的就是typeof了,不过typeof并不完美;

typeof1;//"number"typeof{};//"object"typeofnull;//"object"typeof[];//"object"

如上,在进行null,数组判断的时候,值都是'object',这显然不是 预期的效果。所以有了如下方法,进行判断;

利用Object的toString()方法以及call()方法来一招瞒天过海,移花接木,对任意类型调用toString()方法,继而得出一个结果[object TYPE]TYPE为被判断目标的真实类型。

//可以检测的类型注释内容是checkType中的结果。varnumber=1;//[objectNumber]varstring='string';//[objectString]varboolean=true;//[objectBoolean]varund=undefined;//[objectUndefined]varnul=null;//[objectNull]varobj={a:1};//[objectObject]vararray=[1,2,3];//[objectArray]vardate=newDate();//[objectDate]varerror=newError();//[objectError]varreg=/a/g;//[objectRegExp]varfunc=functiona(){};//[objectFunction]functioncheckType(){Object.prototype.toString.call(arguments);//[objectArguments]for(vari=0;i<arguments.length;i++){console.log(Object.prototype.toString.call(arguments);}}checkType(number,string,boolean,und,nul,obj,array,date,error,reg,func)Object.prototype.toString.call(Math)//[objectMath]Object.prototype.toString.call(JSON)//[objectJSON]//实际用得到的写法:不判断Math,JSONvarclass2type={};"BooleanNUmberStringFunctionArrayDateRegExpObjectErrorNullUndefined".split("").map(function(item,index){class2type["[Object"+item+"]"]=item.toLowerCase();})functiontype(obj){if(obj==null){returnobj+"";}returntypeof==='object'||typeofobj==='function'?class2type[Object.prototype.toString.call(obj)||'object':typeofobj}

孔乙己的大学问

孔乙己的"回"字写法是有够死脑筋的,但是用对了地方,何尝不是一种钻研呢?

哈哈哈,希望能用得上吧!

作者:林深鹿


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/JavaScript/673.html