博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础一:JS数据类型
阅读量:6591 次
发布时间:2019-06-24

本文共 3160 字,大约阅读时间需要 10 分钟。

*本文章主要总结一下js数据类型的识别判断方法

tyoeof
instanceof
Object.prototype.toString.call
constructor
最后封装一个函数,可以判别所有的类型*

1.数据类型

基本类型:

  1. Undefined类型:该类型只有一个值,即undefined(小写),在使用var声明变量但是未对其加以初始化时,这个变量的值就是undefined。
  2. Null类型:该类型也只有一个值,即null(小写),null值表示一个空对象指针,所以用typeof操作符检测null值会返回object的原因。
  3. Boolean类型:改类型有两个值:true和false(小写)
  4. Number类型:表示整数和浮点数
  5. String类型:即字符串

引用类型

  1. Object类型:即对象
  2. Array类型:数组
  3. Date类型:日期
  4. RegExp类型:正则
  5. Function类型

2.类型的识别的判断方法

(1)typeof总结:

首先typeof不是方法,只是一个操作符。

  1. 可以识别标准类型(Null除外
  2. 不能识别具体的对象类型(Function除外
  3. 返回的值首字母都是小写!!!!!!!!
//识别标准类型        typeof "jerry";      //"string"        typeof 12;           //"number"        typeof true;         //"boolean"        typeof undefined;   //"undefined"        typeof null;         //"object"        typeof {name:"jerry"};   //"object"            //识别引用类型        typeof function(){};  //"function"        typeof [];            //"object"        typeof new Date;     //"object"        typeof /\d/;         //"object"        //创建一个自定义对象        function Person(){};        typeof new Person;      //"object"

(2)instanceof

//能够判别引用类型    [] instanceof Array;       //true    /\d/ instanceof RegExp;    //true    new Date instanceof Date;  //true    var a = function(){};     a instanceof Function;     //true       //不能判别原始类型    1 instanceof Number;          //false    "jerry" instanceof String;  //false        //能够判别自定义对象类型及父子类型    //自定义类型    function Person(){};    Person instanceof Function;  //true    //父子类型    function Point(x,y){        this.x = x;        this.y = y;    }    function Cirele(x,y,r){        Point.call(this,x,y);        this.radius = r;    }    Circle.prototype = new Point();    Circle.prototype.constructor = Circle;    var c = new Circle(1,1,2);    c instanceof Circle  //true    c instanceof Point  //true

结论

  1. 可以判别内置对象类型
  2. 不能判别原始类型
  3. 判别自定义对象类型
  4. 结合1和3,用instanceof可以识别所有的对象类型

(3)Object.prototype.toString.call

Object.prototype.toString.call("123");    //"[object String]"        //封装函数,并做截取    function type(obj){        return Object.prototype.toString.call(obj).slice(8,-1);    }    //测试    type("123");  //"String"        //自定义类型    function Point(x,y){        this.x = x;        this.y = y;    }    //测试    type(new Point(1,2));       //"Object"

结论:

  1. 上述封装的函数可以识别基本类型以及引用对象类型
  2. 不能识别自定义对象类型

(4)constructor(构造这个对象的构造函数的本身)

//判断基本类型(基本类型也有构造函数);但是null和undefined除外,它俩没有构造函数    "jerry".constructor === String;  //true    (1).constructor ===Number;        //true        //判断引用类型    new Date().constructor === Date;  //true    [].constructor === Array;   //true        //判断自定义对象    function Person(name){        this.name = name;    }    new Person("jerry").constructor === Person; //true        //对constructor判别进行方法的封装    function getConstructorName(obj){        return (obj===undefined||obj===null)?obj:                   (obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1]);    }

封装的原理:

  1. obj:假如传入的参数是null或者undefined,没有构造函数直接返回
  2. obj.constructor如果存在执行&&后面的语句
  3. obj.constructor.toString():将类型对应的构造函数转化成字符串 "Function Number(){code...}"
  4. math(/function\s*([^(]*)/)[1]:匹配构造函数的名称,正则匹配

结论:

  1. 判别基本类型(Undefined/Null除外)
  2. 判别引用类型
  3. 判别自定义对象类型

结论:所以可以封装一个函数getConstructorName判断所有类型,但是这个函数返回的除了null和undefined是小写之外,其他的首字母都是大写。

转载地址:http://zkuio.baihongyu.com/

你可能感兴趣的文章
后台统计
查看>>
React组件: 提取图片颜色
查看>>
3D应用开发中的欧拉角和旋转矩阵
查看>>
爬虫必备技能xpath的用法和实战
查看>>
MacOS下安装Grafana、InfluxData、telegraf
查看>>
RxJava2.0的初学者必备教程(九)
查看>>
记一次omi的项目之旅
查看>>
Android API级别、代号、发布时间及平台亮点整理
查看>>
安装配置nagios
查看>>
QQ第三方授权登录(带详细源码)
查看>>
LLDP(链路层发现协议)
查看>>
Ubuntu14 添加程序启动
查看>>
我的友情链接
查看>>
windows网络安全以及常见网络***方式
查看>>
警告 初始化默认驱动器时出错“找不到运行 Active Directory Web 服务的默认服务器。”...
查看>>
JS字符串转换数字
查看>>
centos7-修改主机名
查看>>
面试宝典系列-mysql面试基础题
查看>>
微信硬件平台对接--蓝牙
查看>>
spring data for mongo
查看>>