前端/移动开发面试题更新 2026-08-05

请用 JavaScript 手写一个与原生数组 push 行为一致的实现,要求给出完整代码,并说明实现要点。

前端/移动开发编码实现技术原理JavaScript

考察说明

考查对 JavaScript 数组原生方法 push 的底层行为理解及动手实现能力。

回答思路

  1. 【回答框架 1】push 方法的核心行为是在数组末尾追加一个或多个元素,并返回新数组的长度。实现时需先确定 this 指向,通常默认指向数组实例,但通过 call 或 apply 也可作用于类数组对象。
  2. 【回答框架 2】具体实现步骤:先获取当前数组的 length 属性值,记为 len;然后遍历传入的所有参数,逐个赋值到 this[len + i] 的位置;最后更新 this.length 为 len + 参数个数,并返回新的长度。
  3. 【回答框架 3】代码演示:Array.prototype.myPush = function() { var len = this.length >>> 0; for (var i = 0; i < arguments.length; i++) { this[len + i] = arguments[i]; } this.length = len + arguments.length; return this.length; }; 其中无符号右移 0 用于将 length 转为非负整数,避免异常。
  4. 【回答框架 4】边界情况需要处理:当 this 为 null 或 undefined 时应报错;若目标对象 length 属性不是数字,则先转为整数;push 操作会触发数组索引更新,且 length 会自动更新,无需手动处理稀疏数组的空位。
  5. 【回答框架 5】在 V8 等引擎中,push 可能被优化为快速路径,但手写实现只需保证语义一致,性能不作为主要考虑;最终可用一个测试用例验证结果与原生 push 等效。
  6. 【关键点 1】push 是修改原数组并返回新长度的方法。
  7. 【关键点 2】实现时先读取当前 length,再赋值新元素,最后更新 length。
  8. 【关键点 3】支持多参数追加,通过 arguments 对象遍历参数。
  9. 【关键点 4】对 this 做类型检查,length 需转为非负整数。
  10. 【关键点 5】测试时对比原生 push,确保返回值和数组内容一致。
  11. 【易错点 1】不要忘记更新 length,否则后续操作可能出错;也不要直接 push 到 length 属性而不赋值元素。
  12. 【易错点 2】忽略参数个数或只处理单个参数会导致多参数调用结果错误。
  13. 【易错点 3】未处理 this 为 null/undefined 时会抛错,但在严格模式与普通模式行为不同,需注意兼容。