关于js typeof 与 instanceof 判断数据类型区别及开发使用

目录
  • 1、typeof 操作符
  • 2、instanceof 操作符
  • 3、typeof 和 instanceof 的区别以及开发中的使用建议

前言:

日常的开发中,我们经常会遇到判断一个变量的数据类型或者该变量是否为空值的情况,你是如何去选择判断类型的操作符的?本文来总结记录一下我们开发人员必须掌握的关于 typeof instanceof 的知识点以及在开发中的使用建议,同时在面试过程中也经常会遇到这样的问题。

1、typeof 操作符

typeof 操作符,确定任意变量的数据类型,确切说,它是判断一个变量是否为字符串、数值、布尔值或 undefined 的最好方式。其返回值为字符串类型,其使用方法如下:typeof 是一个操作符,不是一个函数,但是使用可以将变量作为参数传入:
a、typeof  operand
b、typeof (operand)

(1)返回值为字符串类型,其中:


返回值


含义值


"undefined"


未定义


"boolean"


布尔值


"string"


字符串


"number"


数值


"object"


对象(而不是函数)或 null


"function"


函数


"symbol"


符号

(2)常见使用方法

        console.log(typeof undefined);//'undefined'
        console.log(typeof true);//'bpplean'
        console.log(typeof ("number"));  //'string'
        console.log(typeof "number");  //'string'
        console.log(typeof 1);//'number'
        console.log(typeof Symbol());//'symbol'
        //对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性
        console.log(typeof null);   //'object'
        console.log(typeof [1, 2, 3]);//'object'
        console.log(typeof undefined);  //'undefined'
        //通过 typeof 操作符来区分函数和其他对象
        function f1() { console.log(111); }
        console.log(typeof f1);  //'function'
        console.log(typeof f1());  // 111 'undefined'

(3)不能通过typeof 来判断一个变量是否存在

        var a;
        if (a === undefined) {
            console.log("变量不存在")
        } else {
            console.log("变量存在")
        }
     // 变量不存在

2、instanceof 操作符

typeof虽然对原始值很有用,但它对引用值的用处不大。我们通常不关心一个值是不是对象,而是想知道它是什么类型的对象。为了解决这个问题,ECMAScript 提供了 instanceof 操作符。使用如下:

        function f1() { console.log(111); }
        console.log(f1 instanceof Object);//true
        console.log(f1 instanceof Function);//true
        console.log(f1 instanceof RegExp);//false

所有引用值都是 Object 的实例,因此通过 instanceof 操作符检测任何引用值和Object 构造函数都会返回 true

  • 类似地,如果用 instanceof 检测原始值,则始终会返回 false ,因为原始值不是对象。

instanceof 运算符用于判断构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。其实现原理如下:

  function myInstanceof(left, right) {
    let proto = Object.getPrototypeOf(left), // 获取对象的原型
    prototype = right.prototype; // 获取构造函数的 prototype 对象

  // 判断构造函数的 prototype 对象是否在对象的原型链上
    while (true) {
      if (!proto) return false;
      if (proto === prototype) return true;
      proto = Object.getPrototypeOf(proto);
    }
 }

3、typeof 和 instanceof 的区别以及开发中的使用建议

typeof instance 都是判断数据类型的方法,区别如下:

  • typeof会返回一个变量的基本类型,instanceof返回的是一个布尔值
  • instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型
  • typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了function 类型以外,其他的也无法判断

可以看到,上述两种方法都有弊端,并不能满足所有场景的需求

如果需要通用检测数据类型,建议采用Object.prototype.toString,调用该方法,统一返回格式“[object Xxx]”的字符串。使用如下:

        console.log(Object.prototype.toString.call(undefined))  //"[object Undefined]"
        console.log(Object.prototype.toString.call(true))  // "[object Boolean]"
        console.log(Object.prototype.toString.call('1'))  // "[object String]"
        console.log(Object.prototype.toString.call(1))    // "[object Number]"
        console.log(Object.prototype.toString.call(Symbol()))    // "[object Symbol]"
        console.log(Object.prototype.toString.call({}))   // "[object Object]"
        console.log(Object.prototype.toString.call(function () { }))   // "[object Function]"
        console.log(Object.prototype.toString.call([]))       //"[object Array]"
        console.log(Object.prototype.toString.call(null))    //"[object Null]"
        console.log(Object.prototype.toString.call(/123/g))     //"[object RegExp]"
        console.log(Object.prototype.toString.call(new Date()))  //"[object Date]"

总结:

到此这篇关于关于js typeof instanceof 判断数据类型区别及开发使用的文章就介绍到这了,更多相关js typeof instanceof 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaScript类型检测之typeof 和 instanceof 的缺陷与优化

    在javascript中,typeof 和 instanceof 是用来判断数据类型比较通用的两个方法,这篇文章的目的是通过对这两个方法介绍来分析其存在的不足并提出优化方案. typeof -------------------------------------------------------------------------------- typeof 返回一个表达式的数据类型的字符串,返回结果为javascript中的基本数据类型,包括:number.boolean.string.o

  • 详解JavaScript中typeof与instanceof用法

    今天写JS代码,遇到动态生成多个名称相同的input复选按钮 需要判断其是否是数组,用到了if (typeof(document.MapCheckMgr.checkid)!="undefined") 以前用得少,就顺便查了一下关于typeof的那些事 typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果: number,boolean,string,function(函数),object(NULL,数组,对象),undefined. 如: alert(ty

  • JavaScript中instanceof与typeof运算符的用法及区别详细解析

    JavaScript中的instanceof和typeof常被用来判断一个变量是什么类型的(实例),但它们的使用还是有区别的: typeof 运算符返回一个用来表示表达式的数据类型的字符串. typeof expression ; expression 参数是需要查找类型信息的任意表达式. 说明typeof 是一个一元运算符,放在一个运算数之前. typeof 运算符把类型信息当作字符串返回.typeof 返回值有六种可能: "number" ,"string",

  • 浅谈javascript中的instanceof和typeof

    对于instanceof和typeof,以前偶尔的用到过,特别是typeof用到的相对更多一些,今日研究ext源码,很多地方都用到了instanceof,突然觉得他们两个有些相似但也应该有他们区别,网上看了一些文章,对它们之间的关系有了一定的了解. instanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量. typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefine

  • JS中typeof与instanceof之间的区别总结

    JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类型.typeof 一般只能返回如下几个结果: number,boolean,string,function,object,undefined.我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="un

  • Javascript typeof与instanceof的区别

    JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类型.typeof 一般只能返回如下几个结果: number,boolean,string,function,object,undefined.我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="un

  • 谈谈我对JavaScript中typeof和instanceof的深入理解

    这次主要说说javascript的类型判断函数typeof和判断构造函数原型instanceof的用法和注意的地方. typeof 先来说说typeof吧.首先需要注意的是,typeof方法返回一个字符串,来表示数据的类型. typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类型.typeof 一般只能返回如下几个结果: number,boolean,string,function,object,undefined.我们可以使用

  • 菜鸟也能搞懂js中typeof与instanceof区别

    目录 一.typeof 二.instanceof 三.区别 一.typeof typeof 操作符返回一个字符串,表示未经计算的操作数的类型 使用方法如下: typeof operand typeof(operand) operand表示对象或原始值的表达式,其类型将被返回 举个例子 typeof 1 // 'number' typeof '1' // 'string' typeof undefined // 'undefined' typeof true // 'boolean' typeof

  • 关于js typeof 与 instanceof 判断数据类型区别及开发使用

    目录 1.typeof 操作符 2.instanceof 操作符 3.typeof 和 instanceof 的区别以及开发中的使用建议 前言: 日常的开发中,我们经常会遇到判断一个变量的数据类型或者该变量是否为空值的情况,你是如何去选择判断类型的操作符的?本文来总结记录一下我们开发人员必须掌握的关于 typeof 和 instanceof 的知识点以及在开发中的使用建议,同时在面试过程中也经常会遇到这样的问题. 1.typeof 操作符 typeof 操作符,确定任意变量的数据类型,确切说,它

  • JavaScript 判断数据类型的4种方法

    本文提供四种方法判断js数据类型,这里记录了它们之间的差异,分别是 typeof 运算符.instanceof 运算符.constructor 属性.Object.prototype.toString 方法. 一.使用 typeof 判断数据类型 console.log('测试 Number ->', typeof 1); // number console.log('测试 Boolean ->', typeof true); // boolean console.log('测试 String

  • JavaScript判断数据类型有几种方法及区别介绍

    有五种数据判断类型方法typeof .instanceof.constructor.Object.prototype.toString.call().jquery.type() 一.typeof方法 typeof是个操作符,可以判断基本数据类型(返回的结果只能是number,string,boolean,null,symbol,function,object) 返回值分以下几种 对于基本类型.除了null值返回object以外,其他均返回正确的结果 对于引用值来说,除了function返回fun

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

    判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异同. 先举几个例子: var a = "iamstring."; var b = 222; var c= [1,2,3]; var d = new Date(); var e = function(){alert(111);}; var f = function(){this.name=&

  • js和jquery判断数据类型的4种方法总结

    1.typeof typeof是一个运算符,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算. 此方法的返回结果只要以下几种: Number.String.undefined.Bollean.Object.Function 弊端在于如果数据类型为引用数据类型,他只能返回 Object console.log(typeof 1); //number console.log(typeof true); //bollean console.lo

  • 利用JS判断数据类型的四种方法

    目录 前言 1.typeof 2.instanceof 3.constructor 细节问题: 4.toString 总结 前言 Javascript 中的数据类型判断其实是一个JavaScript非常基础问题,但不论是日常实际编程过程中和还是面试时,这都是一个非常常见的问题. 在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined.Null 引用类型:O

随机推荐