Javascript学习笔记之数组的遍历和 length 属性

作者:hebedich 时间:2024-04-18 10:53:43 

尽管数组在 Javascript 中是对象,但是不建议使用 for in 循环来遍历数组,实际上,有很多理由来阻止我们对数组使用 for in 循环。
因为 for in 循环将会枚举原型链上的所有属性,并且唯一阻止的方法是使用 hasOwnProperty 来判断,这将比普通的 for 循环要慢不少。

遍历

为了达到最佳性能来遍历一个数组,最好的方式就是使用经典的 for 循环。


var list = [1, 2, 3, 4, 5, ...... 100000000];
for(var i = 0, l = list.length; i < l; i++) {
    console.log(list[i]);
}

这儿有一个额外的技巧,就是通过 l = list.length 来缓存数组的长度。
尽管属性 length 是定义在数组本身的,但是在循环的每一次遍历时仍然会有开销。尽管最新的 Javascript 引擎可能已经对这种情况作了性能上的优化,但是你并不能保证你的 Javascript 代码会一直在这种浏览器上运行。
实际上,不缓存长度的循环要比缓存长度的循环性能上慢不少。

length 属性

尽管 length 属性仅仅通过 getter 方法返回数组中元素的个数,但是可以通过 setter 方法来截断数组。


var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
foo; // [1, 2, 3]
foo.length = 6;
foo.push(4);
foo; // [1, 2, 3, undefined, undefined, undefined, 4]

给 length 属性赋值一个更小的数将会截断数组,如果赋值一个更大的数则不会截断数组。

总结

为了性能达到最优,建议使用 for 循环而不是使用 for in 循环,同时缓存 length 属性。

还有数组对象是没有任何方法的,只有一个唯一的属性length。字符串对象是有length方法的~~

标签:Javascript,数组,遍历,length
0
投稿

猜你喜欢

  • Python 异步等待任务集合

    2022-08-14 17:23:22
  • Python连接数据库并批量插入包含日期记录的操作

    2024-01-12 21:07:03
  • Python 将 QQ 好友头像生成祝福语的实现代码

    2022-01-11 20:29:33
  • Golang断言判断值类型的实现方法

    2024-02-16 09:59:38
  • ASP运行环境iis和pws的搭建

    2007-09-22 18:44:00
  • ORACLE查询删除重复记录三种方法

    2024-01-19 11:03:10
  • python热力图实现简单方法

    2023-10-28 06:14:41
  • js图片随机显示技巧

    2007-08-19 20:20:00
  • 在ASP.NET 2.0中操作数据之五十四:添加新记录时包含一个文件上传选项

    2024-03-16 02:11:24
  • 用正则替换所有URL

    2009-03-13 13:51:00
  • python中多个装饰器的执行顺序详解

    2022-04-30 13:43:51
  • Innodb中mysql快速删除2T的大表方法示例

    2024-01-22 09:14:21
  • asp中access升级到sql server后要做的工作

    2007-08-11 13:35:00
  • Python 文件处理注意事项总结

    2022-05-20 23:05:17
  • php+ajax无刷新上传图片实例代码

    2023-11-17 11:27:58
  • Oracle 外连接实现代码

    2009-08-08 23:08:00
  • Pycharm挂代理后依旧插件下载慢的完美解决方法

    2023-06-17 23:07:31
  • ASP使用缓存方法及缓存类详解

    2008-02-15 08:36:00
  • 在RedHat系Linux上部署Python的Celery框架的教程

    2023-07-30 15:49:37
  • 自动完成JS类(纯JS, Ajax模式)

    2024-05-11 09:41:59
  • asp之家 网络编程 m.aspxhome.com