js 数据类型检测

       提起数据类型检测  大多数人首先想起的应该是  typeof 'xxx' == '数据类型' 坦然这种方法对于基本数据类型的检测仍是很是方便的,可是当遇到引用数据类型 Object时却心有余而力不足,下面就来说讲这些数据类型的检测方法吧
  
数组

  1.使用typeof方法
this

    首先咱们来看看下面的示例将会在控制台打印出什么spa

//检测方法                                    //输出类型  
typeof
function(){} ====> ‘functiontypeof "" ====> 'string' typeof 545 ====> 'number' typeof null ====> 'object'
typeof true ====> 'boolean' typeof undefined ====> 'undefined' typeof [] ====> 'object' typeof {} ====> 'object'
typeof Symbol() ====> 'symbol'

       在上面的示例中咱们能够明确看出使用   typeof   来作类型检测时就出现上文说起的缺陷 没法检测出 数组 null 等数据类型,至于为何null做为基本数据类型为啥也会被typeof检测成object(这就是js的历史遗留问题了) -- JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。因为 null 表明的是空指针(大多数平台下值为 0x00),所以,null的类型标签也成为了 0,typeof null就错误的返回了"object",因此 typeof方法做为基本数据类型除  null 以外的简单数据类型判断仍是一种不错的方案prototype

 

  2. 使用instanceof方法判断数据类型指针

    先说下 instanceof 主要时用来干吗的吧  在mdn官网咱们能够看到关于 instanceof 的解释
    instanceof运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上,也就是说只要原型链上的constructor 对象下的prototype的值是对象类型仍是数组类型(原理上是遍历原型链判断)
       如图:
    数组-----                                                                                                           对象----

                     
code

       因此能够知道,该方法用来判断引用类型下的对象具体类型是不错的一种方法,这种方法在判断除了Function 的基本类型 以外 所有会返回false,其中 function 的原型链上也是继承至object,因此 function  instanceof Object 也是返回true 的 便可以用来判断除 object自己判断以外的引用类型,以及function基本类型 ,和原型继承下来的方法均可以判断出来对象

[] instanceof Array                        ====>         true
[] instanceof object                       ====>         true
({}) instanceof Array                      ====>         false
'1324' instanceof String                   ====>         false
(function(){}) instanceof Function         ====>         true
 2313 instanceof Number                    ====>         false
function test(ang) { this.a = ang; } var mytest = new test("Honda"); var a = mytest instanceof Car; ====> true

 

 

   3.使用 Object.prototype.toString.call() 方法  目前来讲这个应该算是万金油类型的能知足大多数判断(固然觉得该方法基于原型 若是原型上的toString被修改 这方法天然也就不许了),blog

固然这方法是没法判断除原型上的继承实例的 如要判断需使用 instanceof 方法
  
继承

Object.prototype.toString.call(null);              =======>       ”[object Null]”
Object.prototype.toString.call(undefined); =======> ”[object Undefined]”
Object.prototype.toString.call(“abc”); =======> ”[object String]”
Object.prototype.toString.call(123); =======> ”[object Number]”
Object.prototype.toString.call(true); =======> ”[object Boolean]”
Object.prototype.toString.call(function);          =======>       ”[object Function]”
Object.prototype.toString.call([]);                =======>       ”[object Array]”
Object.prototype.toString.call({});                =======>       ”[object Object]”
相关文章
相关标签/搜索