技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

JavaScript检查对象是否数组的最快方法

作者:admin    时间:2022-6-1 11:34:22    浏览:

在上一文中,介绍了JavaScript检查对象是否数组的5种方法,不过未对它们的性能进行比较,本文将介绍,这5种方法中,哪种方法最好用?哪种方法运行起来是最快的?

各种方法的速度比较

有开发人员使用 jsPerf 比较了在 JavaScript 中检查数组的各种方法,下面是得到的结果:


点击图片放大

你如果对这几种方法还不够了解,请参看文章JavaScript检查对象是否数组的5种方法

结果显示,Array.isArray().constructor 或者 instanceof 一样快,但是 Object.prototype.toString.call([]) 比较慢。

这个结果可能让一些人比较失望,因为更多人使用的方法是 Object.prototype.toString.call([]),而这种方法却是最慢的。

结果显示Array.isArray()的速度是最快的,尽管你的个人偏好可能并不是它。

使用带有空检查的 .constructor,运行速度排在倒数第二。

但是,如果你是 Object.prototype.toString.call([]) 的粉丝,请不要担心!差异表明,这种稍慢的方法仍然非常快:在我的家用 PC 上每秒执行超过 700,000,000 次操作。

因此,除非你进行数万亿次数组检查,否则通过将任何一种方法换成另一种方法,你不会看到代码速度的显着差异。 

5种检查方法使用哪种合适?

因为关键字 typeofnull 和所有对象(包括数组)返回“object”,所以检查数组需要另外的方法。

特定于数组的方法

ES5 辅助方法 Array.isArray() 将快速简单地告诉你任何 JavaScript 变量是否为数组: Array.isArray([]) // true,它适用于 nullundefined(但不适用于未声明的变量)。

自 Internet Explorer 9 以来,所有浏览器都广泛支持 Array.isArray() 方法,因为它是 ECMAScript 5 规范的一部分。

你可能会看到使用了 instanceof:[] instanceof Array // true,但不推荐使用 instanceof,因为它在 iframe 中不起作用。

适用于任何对象的方法

有几种方法可用于检查数组,因为它们可用于确定任何 JavaScript 对象的类型。

更通用的方法 Object.prototype.toString.call([]) // "[object Array]" 将告诉你任何值是什么类型的对象,包括原语。

为了只捕获类型,可以使用 .slice() 处理该字符串: Object.prototype.toString.call([]).slice(8,-1) // Array

同样, .constructor 属性将返回 JavaScript 值的构造函数。对于数组,这是内置的全局函数 Array()

该函数可以与全局对象进行比较,或者构造函数的 .name 属性可以作为字符串访问:[].constructor.name // "Array"

但是,.constructor 的缺点是可以为其分配一个新值,从而否定你的数组检查: [].constructor = 3 // 有效

检查未声明的数组

关键字 typeof 不会将数组与其他对象区分开来,尽管 typeof 对于筛选出未声明的变量仍然很有用。

typeof 关键字返回“object”时,我们知道变量已被声明并分配了一个对象或一个空值。

同时,typeof 将为未声明的变量返回“undefined”而不是抛出 ReferenceError,如果你认为你可能正在使用未声明的变量,则首先检查 typeof 很有用。

一旦我们知道变量是使用 typeof 声明的(无论是 === "object" 还是 !== "undefined"),我们就可以确定地使用 Array.isArray()

检查空数组

最后,当我们确定我们有一个数组时(即当 Array.isArray() 返回 true 时),我们可以使用 .length 检查数组是否为空。

.length0 表示一个空的 JavaScript 数组 [] ,而一个 .length > 0 的数组表示一个非空数组。

请注意,空数组 [] 是真实的,这意味着它在评估为布尔值时返回 true。([] 是真实的,因为所有对象都是真实的。)

检查数组的最佳方法

我介绍了 5 种不同的检查 JavaScript 数组的方法。我在编码时通常使用 Array.isArray() 有几个原因:

  • Array.isArray() 快速且得到广泛支持。
  • Array.isArray() 是显式的,使您的代码更具可读性。
  • Array.isArray() 为 null 和未定义返回 false。

有时,在我担心未声明变量的罕见情况下,我会将数组检查包含在 if(typeof !== "undefined") 语句中。

总结

本文介绍了JavaScript检查对象是否数组的几种方法的速度比较,以及各种方法的优点和缺点。在使用任何一种方法的时候,都应该考虑其存在的问题,以免判断失准。

参考文章

相关文章

标签: 数组  对象  
x
  • 站长推荐
/* 左侧显示文章内容目录 */