javascript中数组的创建方式直接影响其原型链结构:数组字面量[]和new array()创建的对象__proto__均指向array.prototype,可正常使用push、map等方法且array.isarray()返回true;object.create(array.prototype)虽能调用方法但无length自动更新且不被识别为数组;object.create(null)或普通对象无法继承数组行为。

JavaScript 中数组的创建方式直接影响其原型链结构,进而决定能否访问 Array.prototype 上的方法(如 push、map、filter)以及是否继承自 Array 构造函数。
数组字面量创建:默认继承 Array.prototype
使用 [] 创建的数组,其 [[Prototype]] 指向 Array.prototype,因此能直接调用所有原生数组方法。
-
const arr = [];→arr.__proto__ === Array.prototype为 true - 可正常使用
arr.push(1)、arr.map(x => x * 2)等 - 类型检测:
Array.isArray(arr)返回 true
Object.create(Array.prototype):手动构造,但缺失 constructor 和 length 特性
这种方式显式指定原型,虽能继承数组方法,但创建的对象不是真正的“数组实例”——它没有 length 自动更新机制,也不被 Array.isArray() 识别。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
const fakeArr = Object.create(Array.prototype);-
fakeArr.push(1)可执行(因方法存在),但fakeArr.length始终为 0(无内部索引跟踪) -
Array.isArray(fakeArr)返回 false - 不推荐用于实际业务,仅适合理解原型链原理
new Array() 与 new Array(n) 的差异影响继承行为
使用构造函数创建时,参数个数会改变初始化逻辑,但原型链始终正确指向 Array.prototype。
-
new Array(1, 2, 3)→ 创建含三个元素的数组,__proto__正确 -
new Array(5)→ 创建长度为 5 的稀疏数组(空位),仍是标准数组实例,Array.isArray()为 true - 注意:
new Array('a')等同于['a'];单个数字参数是特例,易引发误解
Object.create(null) 或普通对象赋值:完全脱离数组原型链
若强行把数组方法挂到普通对象上,或用 Object.create(null) 创建容器,就彻底丢失了数组继承能力。
-
const obj = Object.create(null); obj.push = Array.prototype.push;→ 调用会失败(this缺少length和索引管理) -
const plain = {}; plain[0] = 'a'; plain.length = 1;→ 即使手动加length,也无法触发原生数组行为(如push自动更新length) - 这类对象无法享受数组方法的底层优化,也不兼容大多数依赖
Array.isArray的工具库
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










