typeof和instance of的用法区别,instanceof比较的是什么

  typeof和instance of的用法区别,instanceof比较的是什么

  Type和instanceof运算符都可以用来确定数据类型,那么它们之间有什么区别呢?下面这篇文章将带你了解typeof和instanceof,并谈谈它们的区别。希望对你有帮助!

  Type和instanceof运算符是用来判断数据类型的,但是它们的使用场景不同,有些细节需要特别注意。接下来我们就来了解一下,彻底掌握知识,再也不怕面试官提问了。

  

typeof

   typeof是一元运算符,放在操作数之前,操作数可以是任何类型。它返回描述操作数类型的字符串。请看栗子:

  Const type=typeof中国万岁’;//字符串

  666的类型;//数字

  typeof true//布尔型

  未定义的类型;//未定义

  typeof符号();//符号

  1n的类型;//bigint

  type of()={ };//函数

  []的类型;//对象

  {}的类型;//对象

  新字符串的类型(“XXX”);//对象

  类型为null//object从上面的例子可以看出,typeof只能准确判断基本的数据类型和函数(函数其实是对象,不属于另一种数据类型,但也可以用typeof来区分),而不能准确判断引用的数据类型(全部返回object)。

  需要注意的是,调用typeof null会返回object,因为特殊值null被认为是对空对象(也称为空对象指针)的引用。

  如果要准确判断引用数据类型,可以使用instanceof运算符。

  

instanceof

   instanceof运算符位于操作数之后和给定对象之前。它返回一个布尔值,指示操作数是否是给定对象的实例:

  const result=[]数组的实例;//真

  const Person=function(){ };

  const p=new Person();

  人的p实例;//真

  const message=新字符串( XXX );

  字符串的消息实例;//true

区别

   typeof将返回一个操作数的基本类型,instanceof将返回一个布尔值。

  instanceof可以准确判断引用数据类型,但不能正确判断基本数据类型。

  Type可以确定基本数据类型(null除外),但不能确定引用数据类型(function除外)。

  

扩展

  

Object.prototype.toString.call()

   type of和instanceof都有一定的弊端,不能满足所有场景的需求。如果需要检测一般的数据类型,可以使用Object.prototype.toString.call()方法:

  object . prototype . tostring . call({ });//[对象对象]

  object . prototype . tostring . call([]);//[对象数组]

  object . prototype . tostring . call(666);//[对象号]

  object . prototype . tostring . call( XXX );//[object String]请注意,此方法返回格式为“[object Object]”的字符串。

  

封装函数

  为了使用更方便,我们可以封装这个方法:

  函数getType(值){

  设type=typeof value

  如果(类型!==object) {//如果是基本数据类型,直接返回

  返回类型;

  }

  //如果是引用数据类型,进一步判断,定期返回结果。

  返回Object.prototype.toString.call(值)。replace(/^\[object (\S )\]$/, $ 1 );

  }

  getType(123);//数字

  getType( XXX );//字符串

  getType(()={ });//函数

  getType([]);//数组

  getType({ });//对象

  getType(null);//Null【相关推荐:javascript视频教程,web前端】以上是关于typeof和instanceof区别的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: