js数据类型识别判断方法总结tyeoefinstanceofObject.prototype.toString.callconstructor最后封装了一个可以识别所有类型的函数*1。数据类型基本类型:未定义类型:这种类型只有一个值,即undefined(小写),当一个变量用var声明但没有初始化时,这个变量的值是undefined。null类型:该类型也只有一个值,即null(小写),null值表示一个空对象指针,所以typeof运算符之所以检测到null值,会返回object。布尔类型:该类型有两个值:true和false(小写)。数字类型:整数和浮点数字符串类型:字符串引用类型对象类型:对象数组类型:数组日期类型:日期RegExp类型:regular函数类型2.类型识别的判断方法(1)typeof总结:第一个typeof不是a方法,只是一个运算符。它可以识别标准类型(Null除外),不能识别特定对象类型(Function除外)。返回值首字母全部小写!!!!!!!!//识别标准typeof"jerry";//“字符串”typeof12;//“数字”类型为真;//“布尔”类型未定义;//“未定义”typeofnull;//“对象”typeof{name:“jerry”};//"object"//识别引用类型typeoffunction(){};//“函数”typeof[];//“对象”类型的新日期;//“对象”typeof/\d/;//"object"//创建自定义对象functionPerson(){};新人的类型;//"object"(2)instanceof//可以识别引用类型[]instanceofArray;//true/\d/instanceofRegExp;//truenewDateinstanceofDate;//truevara=function(){};函数实例;//true//不能区分原来的type1instanceofNumber;//false"jerry"instanceofString;//false//可以区分自定义对象类型和父子类型//自定义类型函数Person(){};Person函数实例;//true//父子类型函数Point(x,y){this.x=x;this.y=y;}functionCirele(x,y,r){Point.call(this,x,y);this.radius=r;}Circle.prototype=newPoint();Circle.prototype.constructor=Circle;varc=newCircle(1,1,2);cinstanceofCircle//truecinstanceofPoint//True结论:可以识别内置对象类型但不能识别原始类型可以识别自定义对象类型结合1和3,使用instanceof识别所有对象类型(3)Object.prototype.toString.callObject.prototype.toString.call("123");//[objectString]"//封装函数并拦截函数type(obj){returnObject.prototype.toString.call(obj).slice(8,-1);}//测试类型("123");//"String"//自定义类型函数Point(x,y){this.x=x;this.y=y;}//测试类型(newPoint(1,2));//“对象”结论:上面封装的函数可以识别基本类型,引用对象类型不能识别自定义对象类型(4)构造函数(构造这个对象的构造函数本身)//基本类型的判断(基础类型也有一个构造函数);除了null和undefined,它们没有构造函数"jerry".constructor===String;//true(1).constructor===Number;//true//判断引用类型newDate().construct器===日期;//true[].constructor===数组;//true//判断自定义对象functionPerson(name){this.name=name;}newPerson("jerry").constructor===Person;//true//构造函数判别方法的封装(/function\s*([^(]*)/)[1]);}封装原理:obj:如果传入参数为null或undefined,则没有构造函数直接返回obj.constructor如果执行&&obj.constructor.toString()之后的语句:将类型对应的构造函数转换成字符串"FunctionNumber(){code...}"math(/function\s(1)/)[1]:匹配构造函数名称,正则匹配结论:识别基本类型(Undefined/Null除外)识别引用类型,识别自定义对象类型结论:所以可以封装一个函数getConstructorName来判断所有类型,但是这个函数只返回null和undefinedAll除小写字母(?
