JavaScript中typeof 和 instanceof区别

typeof

typeof 操作符是确定一个变量是字符串、数值、布尔值、还是undefined的最佳工具。
虽然在检测基本数据类型时 typeof 是非常得力的助手,但在检测引用类型的值时,这个操作符的用处不大。

var arr = new Array();
typeof arr // 'object'

var obj = new Object();
typeof obj; // 'object'

instanceof

通常,我们并不想知道某个值是对象,而是想知道他是什么类型的对象。为此ECMAScript提供了 instanceof 操作符,其语法如下:

result = variable instanceof constructor

如果变量是给定引用类型的实例,那么 instanceof 操作符就会返回 true。
如果使用 instanceof 操作符检测基本类型的值,则该操作符始终会返回 false,因为基本类型不是对象。

数组检测

对于确定某个对象是不是数组的经典问题,在一个网页内,或一个全局作用域内使用 instanceof 就能得到满意的结果:

if (value instanceof Array) {
   // 对数组执行某些操作
}

但当网页中包含两个以上不同框架时,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。如果从一个框架向另一个框架传入一个数组,那么传入的数组和第二个框架原生创建的数组分别具有各自不同的构造函数。

instanceof操作符的问题在于,它假定只有一个全局执行环境

为了解决这一问题,EcmaScript 5新增了 Array.isArray() 方法。这个方法的目的是最终确定某个值到底是不是数组,而不管它是在哪个执行环境创建的。

if(Array.isArray(value)) {
   // 对数组执行某些操作
}
posted @ 2020-07-18 00:09  二拳超人  阅读(117)  评论(0)    收藏  举报