zoukankan      html  css  js  c++  java
  • js判断数据类型的几种方法

    今天来谈谈判断数据类型的几种方法:

     一、typeof操作符判断数据类型

    typeof返回的字符串(能够判断的数据类型)

    一、普通对象与函数对象

           Object, Function是Js自带的函数对象

           1. function f1(){ }

           2. var f2 = function(){ }

           3. var f3 = new Function('str', 'console.log(str)');

           4. var o1 = {};

           5. var o2 = new Object();

           6. var o3 = new f1();

      结果如下:

           

    因此 typeof 可判断基本的数据类型,但无法判断引用类型(除了function类),也就是继承自object类型的具体类型,比如Array、Date、自定义类等。

    二、instanceof操作符判断数据类型

       a istanceof A :判断a是否是A的实例,其实是在判断a._proto_ === A.prototype,所以用这种方法判断数据类型存在一个问题,举例来说:

    1. var arr = [];  
    2. arr instanceof Array     // true  
    3. arr instanceof Object   // true 

      原因:

       arr._proto_ === Array.prototype;  

         Array.prototype._proto_ === Object.prototype;  

       Object.prototype._proto_ === null;  

      基于原型链的查找机制。

      因此,我们用 instanceof 也不能完全精确的判断object类的具体数据类型。

    三、Arrary.isArray()方法判断是否为数组

      这是S5中新增的数组方法,用来检测数组类型。但在IE9以下浏览器不支持。可以解决当网页存在多个全局执行环境下用instanceof操作符判断类型的问题。

      var arr = [];  

      Array.isArray(arr);  //true

    四、Object.prototype.toString.call()精确判断数据类型

       可以用来精确判断数据类型,包括Boolean、Number、String、Function、Array、Date、RegExp、Object、Error等类型。返回类似’[object type]‘的字符串,

       type指前面提到过的Boolean、String等类型。
       缺点:无法检测开发人员自定义的构造函数创建的实例类型。
       如:

      function Person(name){  

        this.name = name;  

      }  

      var p1 = new Person('san');  

      Object.prototype.toString.call(p1)   //'[object Object]'  

      

  • 相关阅读:
    Sony Z1 USB 调试
    消除“Unfortunately, System UI has stopped”的方法
    变动数据模拟cons
    string to integer
    single number
    罗马数字转为阿拉伯数字
    整数逆序
    回文数字
    回文字符串
    count and say
  • 原文地址:https://www.cnblogs.com/gyangfeng/p/7232992.html
Copyright © 2011-2022 走看看