提起数据类型检测  大多数人首先想起的应该是  typeof 'xxx' == '数据类型' 坦然这种方法对于基本数据类型的检测还是非常方便的,但是当遇到引用数据类型 Object时却爱莫能助,下面就来讲讲这些数据类型的检测方法吧
  

  1.使用typeof方法

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

//检测方法                                    //输出类型  
typeof function(){} ====> ‘function’
typeof "" ====> '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 之外的简单数据类型判断还是一种不错的方案

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

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

      所以可以知道,该方法用来判断引用类型下的对象具体类型是不错的一种方法,这种方法在判断除了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被修改 这方法自然也就不准了),

当然这方法是无法判断除原型上的继承实例的 如要判断需使用 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]”
 

js 数据类型检测的更多相关文章

  1. js数据类型检测

    目录 1. typeof {} 2. {} instanceof Object 3. {}.constructor === Object 4. Object.property.toString.cal ...

  2. js数据类型检测小结

    在js中,有四种用于检测数据类型的方式,分别是: typeof 用来检测数据类型的运算符 instanceof 检测一个实例是否属于某个类 constructor 构造函数 Object.protot ...

  3. js数据类型的检测总结,附面试题--封装一个函数,输入任意,输出他的类型

    一.javascript 中有几种类型的值 1.基本数据类型 : 包括 Undefined.Null.Boolean.Number.String.Symbol (ES6 新增,表示独一无二的值) 特点 ...

  4. 总结的JS数据类型判定(非常全面)

    用typeof 来检测数据类型 Javascript自带两套类型:基本数据类型(undefined,string,null,boolean,function,object)和对象类型. 但是如果尝试用 ...

  5. JS数据类型的理解(猜测)

    Js 数据类型 对于这个主题,首先来看几个问题,如果你对这几个问题很清楚的话,那就请直接跳过吧,不用接着往下看了,如果不清楚,建议你还是看看. 1)如果判断函数?function 和object的联系 ...

  6. javascript 数据类型 -- 检测

    一.前言 在上一篇博文中 Javascript 数据类型 -- 分类 中,我们梳理了 javascript 的基本类型和引用类型,并提到了一些冷知识.大概的知识框架如下: 这篇博文就讲一下在写代码的过 ...

  7. 1. js数据类型_对象_函数_内存

    1. js数据类型有哪些? 基本(值)类型 Number ---- 任意数值 String ---- 任意字符串 Boolean ---- true/false undefined ---- unde ...

  8. JavaScript 数据类型检测总结

    JavaScript 数据类型检测总结 原文:https://blog.csdn.net/q3254421/article/details/85483462 在js中,有四种用于检测数据类型的方式,分 ...

  9. js数据类型简单介绍

    JS数据类型 ECMAScript中有5种简单的数据类型:Undefined,Null,Boolean,Number,String.还有一种复杂的数据类型--Object(本质上是由一组无序的名值对组 ...

随机推荐

  1. Armbian编译以及定制

    Armbian项目地址 Github: https://github.com/armbian/build Armbian for TV Box 项目地址 Github: https://github. ...

  2. Linux权限:提示-bash: ./startup.sh: Permission denied的解决方案

    Linux权限:提示-bash: ./startup.sh: Permission denied的解决方案 Linux上启动Tomcat,结果弹出:-bash: ./startup.sh: Permi ...

  3. JDBC 线程安全 数据库连接池

    jdbc 是线程安全的,但是,推荐一个线程用一个链接 JDBC is thread safe: It is quite OK to pass the various JDBC objects betw ...

  4. mysql判断表字段或索引是否存在,然后修改

    判断字段是否存在: DROP PROCEDURE IF EXISTS schema_change; DELIMITER // CREATE PROCEDURE schema_change() BEGI ...

  5. 【转载】 tf.cond() ----------------------(tensorflow 条件判断语句 if.......else....... )

    原文地址: https://cloud.tencent.com/developer/article/1486441 ------------------------------------------ ...

  6. Ubuntu16.04安装Consul

    1.下载安装包 https://www.consul.io/downloads.html wget https://releases.hashicorp.com/consul/1.5.3/consul ...

  7. oracle 高级用法, DECODE 排序, OVER(PARTITION BY X ORDER BY Y DESC) 开窗函数

    场景 01 (IN 语句 排序 decode() 函数): 1,我们在查询中会经常使用这样的用法, select * from table_name t where t.id in (1, 3, 7, ...

  8. es6 学习小计

    es6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这称之为解构:

  9. Nodejs接收图片base64格式保存为文件

    base64的形式为“data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0....”:当接收到上边的内容后,需要将data ...

  10. 容器服务如何在企业客户落地?Rancher 解决之道分享

    Docker 的优势和趋势我想不必再赘述,那么对于非互联网公司的传统企业客户,以及我们大量的围绕企业客户做集成.交付解决方案的服务提供商,需要考虑的一个问题就是怎么样把容器技术以高质量.低成本.易维护 ...