1.typeof

typeof是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括number,string,boolean,undefined,object,function,symbol等。

  1. typeof ""; //string
  2. typeof 1; //number
  3. typeof false; //boolean
  4. typeof undefined; //undefined
  5. typeof function(){}; //function
  6. typeof {}; //object
  7. typeof Symbol(); //symbol
  8. typeof null; //object
  9. typeof []; //object
  10. typeof new Date(); //object
  11. typeof new RegExp(); //object

2.instanceof

  instanceof用来判断A是否为B的实例,表达式为:A instanceof B,如果A是B的实例,则返回true,否则返回false。instanceof检测的是原型,内部机制是通过判断对象的原型链中是否有类型的原型。

  1. {} instanceof Object; //true
  2. [] instanceof Array; //true
  3. [] instanceof Object; //true
  4. "123" instanceof String; //false
    new String(123) instanceof String; //true

我们可以用下面的代码实现instanceof。

  1. function instance(left,right){
  2. let prototype = right.prototype; //获取类型的原型
  3. let proto = left.__proto__; //获取对象的原型
  4. while(true){ //循环判断对象的原型是否等于类型的原型,直到对象原型为null,因为原型链最终为null
  5. if (proto === null || proto === undefined){
  6. return false;
  7. }
  8. if (proto === prototype){
  9. return true;
  10. }
  11. proto = proto.__proto__;
  12. }
  13. }
  14. console.log(instance({},Object)); //true
  15. console.log(instance([],Number)); //false

3.constructor

当一个函数F被定义时,JS引擎会为F添加prototype原型,然后在prototype上添加一个constructor属性,并让其指向F的引用,F利用原型对象的constructor属性引用了自身,当F作为构造函数创建对象时,原型上的constructor属性被遗传到了新创建的对象上,从原型链角度讲,构造函数F就是新对象的类型。这样做的意义是,让对象诞生以后,就具有可追溯的数据类型。

4.Object.prototype.toString()

toString()是Object的原型方法,调用该方法,默认返回当前对象的[[Class]]。这是一个内部属性,其格式为[object Xxx],其中Xxx就是对象的类型。

对于Object对象,直接调用toString()就能返回[object Object],而对于其他对象,则需要通过call、apply来调用才能返回正确的类型信息。

封装一个准确判断数据类型的函数

  1. function getType(obj){
  2. let type = typeof obj;
  3. if(type != "object"){
  4. return type;
  5. }
  6. return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');
  7. }

js判断数据类型的四种方法的更多相关文章

  1. [转]js判断数据类型的四种方法

    原文地址:https://www.cnblogs.com/crackedlove/p/10331317.html 1.typeof typeof是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的 ...

  2. js中判断数据类型的四种方法总结

    js中判断数据类型的四种方法 前言 在js中,我们经常需要判断数据的类型,那么哪些方法可以用来判断数据的类型呢?哪种方法判断数据类型最准确呢? 我们来一个个分析: 1.typeof typeof是一个 ...

  3. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

  4. js 判断数据类型的几种方法

    判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...

  5. js判断类型的四种方法

    typeof:使用typeof可以很方便的判断六种类型:undefined.boolean.string.number.object.function 数组和null会被判断为object类型 ins ...

  6. 判断数组的方法/判断JS数据类型的四种方法

    参考文: 以下 3 个判断数组的方法,请分别介绍它们之间的区别和优劣Object.prototype.toString.call() . instanceof 以及 Array.isArray() h ...

  7. javascript 判断数据类型的几种方法

    javascript 判断数据类型的几种方法一.typeof 直接返回数据类型字段,但是无法判断数组.null.对象 typeof 1 "number" typeof NaN &q ...

  8. 判断js数据类型的四种方法,以及各自的优缺点(转)

    转载地址:https://blog.csdn.net/lhjuejiang/article/details/79623973 数据类型分为基本类型和引用类型: 基本类型:String.Number.B ...

  9. 判断JS数据类型的四种方法

    在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined.N ...

随机推荐

  1. pwm互补输出 死区设置

    void TIM8_PWM_Init(u16 arr,u16 psc){       GPIO_InitTypeDef GPIO_InitStructure;    TIM_TimeBaseInitT ...

  2. hiho 第七周 完全背包

    完全背包 #include<iostream> #include<memory.h> #include<cmath> using namespace std; #d ...

  3. WPF 显示 mp3 专辑图片

    mp3 专辑图片是属于 mp3 的 tag 的一部分,安装 taglib# 的 nuget 安装包到项目.这里使用 TagLib.Portable https://www.nuget.org/pack ...

  4. 错误:无效参数:could not find capabilities for arch=aarch64

    现象:错误:无效参数:could not find capabilities for arch=aarch64 解决: qemu源码编译:(需要指定--cpu=aarch64) ./configure ...

  5. 异步请求获取JSON数据

    json格式的数据广泛应用于异步请求中前后端的数据交互,本文主要介绍几种使用场景和使用方法. <script type="text/javascript"> funct ...

  6. Yii2 Template 组件框架集封装

    项目简介: Yii2_Template是一个“提供大多数PHP常用的组件去集合成的一套基于Yii2的项目框架”. 该项目是一款秉着提高 开发效率.降低开发成本,遵循高拓展,高可用的原则的进行开发的框架 ...

  7. 关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别一览

    平时,不管在pc端页面还是移动端页面,因为我们一般很少会设置某个块的的高度,但是呢,我有时候有需要取到这些高度以便于我们方便进行判断和下一步的编写.一般这个时候我都是直接的获取一个块的高度.heigh ...

  8. Servlet案例7:jsp技术及案例

    jsp运行原理: 根据jsp文件创建java文件(servlet),并编译运行 第一次访问时会被翻译成servlet后执行 jsp三个指令: 1.page指令:页面翻译运行的属性的配置(通常使用默认) ...

  9. js中数字直接点方法会报错,如1.toString()

    Number(11).toString() "11" var num = 111; undefined num.toString() "111" .toStri ...

  10. Django Rest Swagger生成api文档

    关于swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. Sw ...