Array.prototype.push()的理解和手写

1.Array.prototype.push()的用法

Array.prototype.push() 方法用于向数组的末尾添加一个或多个元素,并返回修改后数组的新长度。该方法会直接修改原始数组,而不是创建一个新的数组副本。

以下是 Array.prototype.push() 方法的用法:

javascript 复制代码
var arr = [1, 2, 3];
// 向数组末尾添加一个元素
arr.push(4);
// 现在 arr 的值为 [1, 2, 3, 4]
// 向数组末尾添加多个元素
arr.push(5, 6);
// 现在 arr 的值为 [1, 2, 3, 4, 5, 6]
// 添加数组作为元素
arr.push([7, 8]);
// 现在 arr 的值为 [1, 2, 3, 4, 5, 6, [7, 8]]
// 获取数组的新长度
var newLength = arr.push(9);
// 现在 arr 的值为 [1, 2, 3, 4, 5, 6, [7, 8], 9]
// newLength 的值为 8

Array.prototype.push() 方法可以接受任意数量的参数,并将它们依次添加到数组的末尾。如果传入的参数是数组,则整个数组作为一个元素添加到数组的末尾。该方法返回添加新元素后数组的新长度。

2.Array.prototype.push()的手写

javascript 复制代码
Array.prototype._push = function () {
            let arrLength = 0
            for (let i = 0; i < arguments.length; i++) {
                this[this.length] = arguments[i]
            }
            return this.length
        }
        const nums = [1, 2, 3]
        const numsLen = nums._push(4, 5, 6)
        console.log(numsLen);
        console.log(nums);

3.补充:arguments的使用

当我们不确定有多少个参数传递的时候,可以用arguments来获取。在JavaScript中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。

arguments展示形式是一个伪数组,因此可以进行遍历。伪数组具有以下特点:

  • 具有length属性
  • 按索引方式存储数据
  • 不具有数组的push,pop等方法

在定义函数时没有声明参数,但是在调用函数时可以传入参数。在 JavaScript 中,函数可以接受任意数量的参数,即使在函数定义中没有显式声明参数也可以在调用时传入参数。这些参数可以通过函数内部的 arguments 对象进行访问和处理。

下面是一个示例说明:

javascript 复制代码
// 定义一个函数,没有声明任何参数
function greet() {
    // 访问参数列表的方式之一是使用 arguments 对象
    // arguments 对象包含传递给函数的所有参数
    for (var i = 0; i < arguments.length; i++) {
        console.log('Hello, ' + arguments[i] + '!');
    }
}
// 调用函数并传入参数
greet('Alice', 'Bob', 'Charlie');
// 输出:
// Hello, Alice!
// Hello, Bob!
// Hello, Charlie!

在上面的示例中,函数 greet 在定义时没有声明任何参数,但是在调用时传入了三个参数。函数内部通过 arguments 对象访问传入的参数,并进行相应的处理。因此,即使在函数定义中没有声明参数,也可以在调用函数时传入参数。

相关推荐
shaibdoio几秒前
RPA自动化获客怎么落地?瞬维AI评论区工程实践
前端·自动化·rpa·长沙瞬维ai
计算机魔术师4 分钟前
807亿亏配900%留存:ANT招股书把AI的拧巴摊在桌上了
前端
未来之窗软件服务15 分钟前
web网络请求竞态问题与取消方案-东方仙盟
前端·状态模式·仙盟创梦ide·东方仙盟·网络取消
wshzd34 分钟前
LLM之Agent(120)|DeepSeek-Harness(二十七)Workflow 引擎与 Ralph 循环
前端·数据库·人工智能
涛涛ing1 小时前
React Compiler 1.0 之后,状态管理库正在被重新定义
前端
乘风gg1 小时前
出事了,AI 提效后,老板让我裁员20%
前端·后端·ai编程
Amos_Web1 小时前
Rspack 源码解析(三十二):rspack_plugin_runtime 如何抽象 chunk 加载与启动
前端
Amos_Web1 小时前
通过 Rspack 源码学 Rust(二):所有权、借用与 `&mut`
前端
计算机魔术师1 小时前
AI公司把「灾难性风险」写进招股书?Anthropic这5处反常
前端
西凉的悲伤1 小时前
Jsoup 库 HTML 解析详解
java·前端·html·jsoup