什么是javascript数组_如何遍历和操作数组元素【教程】

发布时间 - 2026-01-21 00:00:00    点击率:
for...in 不适合遍历数组,因为它会枚举所有可枚举属性(包括原型链上的方法和自定义字符串键),且不保证遍历顺序。

JavaScript 数组不是特殊类型,而是 Array 构造函数的实例,本质是键为数字索引、具有自动维护 length 属性的对象。

为什么 for...in 不适合遍历数组

它会枚举所有可枚举属性(包括原型链上新增的方法或意*载的字符串键),且不保证顺序:

con

st arr = [10, 20]; arr.custom = 'test'; Array.prototype.hello = 'world';

for (let key in arr) { console.log(key); // 可能输出 '0', '1', 'custom', 'hello' }

  • for...of 或传统 for (let i = 0; i 遍历元素值
  • Object.keys(arr) 获取纯数字索引(但返回的是字符串,需转数字)
  • for...in 真正适用场景是遍历普通对象的键名,不是数组

mapfilterreduce 的核心区别和误用点

三者都创建新数组(不修改原数组),但语义和返回值完全不同:

  • map:一对一转换,返回与原数组等长的新数组;回调必须有返回值,否则填 undefined
  • filter:筛选,返回满足条件的元素组成的新数组;回调返回布尔值,false/0/null/空字符串都会被过滤掉
  • reduce:聚合,返回单个值(如总和、对象、新数组);必须提供初始值(尤其处理空数组时),否则首项作初始值易出错
const nums = [1, 2, 3];
nums.map(x => x * 2);        // [2, 4, 6]
nums.filter(x => x > 1);     // [2, 3]
nums.reduce((sum, x) => sum + x, 0); // 6

修改原数组的 5 个方法及其副作用风险

这些方法直接改变 arr.length 和元素位置,可能引发意外交互:

  • push/pop:尾部增删 —— 安全,性能好
  • unshift/shift:头部增删 —— 会重排所有索引,大数据量时明显变慢
  • splice:任意位置增删改 —— 第二参数为删除数量,若传 0 则只插入;返回被删除的元素数组,不是原数组

常见坑:arr.splice(0, arr.length) 清空数组,但比 arr.length = 0arr = [] 更重;后者中 arr = [] 是重新赋值,不改变原引用,要注意闭包或外部变量是否还持有旧数组。

判断是不是真数组的可靠方式

typeof [] === 'object' 无法区分数组和普通对象,instanceof Array 在跨 iframe 场景下会失效:

  • 首选 Array.isArray(arr) —— ES5+ 标准、全环境兼容
  • 次选 Object.prototype.toString.call(arr) === '[object Array]' —— 兼容 IE6+
  • 避免用 arr.constructor === Array —— 构造函数可能被改写

稀疏数组(如 [1, , 3])和带非数字属性的类数组(如 {0:1, 1:2, length:2})容易混淆,操作前务必确认类型。


# javascript  # java  # 大数据  # 区别  # 为什么  # red 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: iOS发送验证码倒计时应用  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  深入理解Android中的xmlns:tools属性  香港服务器租用每月最低只需15元?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Python结构化数据采集_字段抽取解析【教程】  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Laravel怎么在Controller之外的地方验证数据  如何快速完成中国万网建站详细流程?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  详解CentOS6.5 安装 MySQL5.1.71的方法  Java解压缩zip - 解压缩多个文件或文件夹实例  JavaScript模板引擎Template.js使用详解  jquery插件bootstrapValidator表单验证详解  实例解析angularjs的filter过滤器  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  教你用AI将一段旋律扩展成一首完整的曲子  详解Android——蓝牙技术 带你实现终端间数据传输  大连网站制作公司哪家好一点,大连买房网站哪个好?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  教你用AI润色文章,让你的文字表达更专业  Android使用GridView实现日历的简单功能  如何用PHP快速搭建高效网站?分步指南  Laravel如何使用Livewire构建动态组件?(入门代码)  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  ,怎么在广州志愿者网站注册?  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  如何用低价快速搭建高质量网站?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel如何处理异常和错误?(Handler示例)  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  进行网站优化必须要坚持的四大原则  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel怎么实现验证码(Captcha)功能  如何为不同团队 ID 动态生成多个独立按钮