基础一:JS数据类型以及判断

本文章主要总结一下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
    结论:

  4. 可以判别内置对象类型

  5. 不能判别原始类型

  6. 判别自定义对象类型

  7. 结合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是小写之外,其他的首字母都是大写。

关键字:JavaScript, 数据类型, 判断

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部