什么是javascript数组_如何遍历和操作数组元素【教程】
发布时间 - 2026-01-21 00:00:00 点击率:次for...in 不适合遍历数组,因为它会枚举所有可枚举属性(包括原型链上的方法和自定义字符串键),且不保证遍历顺序。
JavaScript 数组不是特殊类型,而是 Array 构造函数的实例,本质是键为数字索引、具有自动维护 length 属性的对象。
为什么 for...in 不适合遍历数组
它会枚举所有可枚举属性(包括原型链上新增的方法或意*载的字符串键),且不保证顺序:
const 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真正适用场景是遍历普通对象的键名,不是数组
map、filter、reduce 的核心区别和误用点
三者都创建新数组(不修改原数组),但语义和返回值完全不同:
-
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 = 0 或 arr = [] 更重;后者中 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 动态生成多个独立按钮


