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]'  

      

  • 相关阅读:
    [Android]Parcelable encountered IOException writing serializable object (name = xxx)
    开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
    poj3070--Fibonacci(矩阵的高速幂)
    Java泛型解析(03):虚拟机运行泛型代码
    PHP中的替代语法
    在ubuntu上部署hadoop时出现的问题
    js闭包(函数内部嵌套一个匿名函数:这个匿名函数可将所在函数的局部变量常驻内存)
    js匿名函数(变量加括号就是函数)
    javascript进阶课程--第三章--匿名函数和闭包
    js实现科学计算机
  • 原文地址:https://www.cnblogs.com/gyangfeng/p/7232992.html
Copyright © 2011-2022 走看看