JavaScript typeof和instanceof的区别

在这里插入图片描述
ECMAScript 是松散类型的,因此需要一种手段来检测给定变量的数据类型,typeof 操作符常用于基本数据类型检测,instanceof 操作符常用于引用类型数据检测。

一、typeof

ECMAScript 是松散类型的,一次需要一种手段来检测给定变量的数据类型,typeof 操作符就是负责提供这方面信息的,typeof 可以用于检测基本数据类型和引用数据类型。

  1. 概念:操作符
  2. 目的:检测一个变量是不是基本数据类型的变量,换句话说,判断一个变量是字符串,数值, 布尔值,对象,undefined
  3. 注意:使用 typeof 操作符的时候,如果检测对象是函数,那么操作符返回 “function” ,如果检测对象是正则表达式,在 Safari 和 Chrome 中使用 typeof 的时候会错误的返回 “function”,其他的浏览器返回的是object
var a="英莱特_何某"; 
var b=true; 
var c=10; 
var d; 
var e=null;  //null也是一个对象
var f=new Object(); 
   
alert(typeof a); //string 
alert(typeof b); //number 
alert(typeof c); //boolean 
alert(typeof d); //undefined 
alert(typeof e); //object 
alert(typeof f); //object

typeof 主要用于检测基本数据类型:数值、字符串、布尔值、undefined, 因为 typeof 用于检测引用类型值时,对于任何 Object 对象实例(包括 null ),typeof 都返回 “object” 值,没办法区分是那种对象,对实际编码用处不大。

二,instanceof

在检测基本数据类型时 typeof 是非常得力的助手,但在检测引用类型的值时,这个操作符的用处不大,通常,我们并不是想知道某个值是对象,而是想知道它是什么类型的对象。此时我们可以使用 ECMAScript 提供的 instanceof 操作符。

  1. 概念:检验引用类型
  2. 目的:判断对象是 Array, RegExp
  3. 注意:object 是所有对象的基类
var array=new Array();  
var object=new Object();  
var regexp=new RegExp();  
function Func(){};  
var func1=new Func();  
  
alert(array instanceof Array);  //true  
alert(object instanceof Object);  //true  
alert(regexp instanceof RegExp);  //true  
alert(func1 instanceof Func);  //true 

根据规定,所有引用类型的值都是 Object 的实例。因此,在检测一个引用类型值和 Object 构造函数时,instanceof 操作符会始终返回 true。如果使用 instanceof 操作符检测基本类型值时,该操作符会始终返回 false,因为基本类型不是对象。

发布了161 篇原创文章 · 获赞 71 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_44034384/article/details/99249506