前端JavaScript篇之数组有哪些原生方法?常见的位运算符有哪些?为什么函数的 arguments 参数是类数组而不是数组?如何遍历类数组?

目录

  • 数组有哪些原生方法?
    • 参考案例
  • 常见的位运算符有哪些?
    • 总结
  • 为什么函数的 arguments 参数是类数组而不是数组?如何遍历类数组?


数组有哪些原生方法?

JavaScript中数组有许多原生方法用于执行各种操作。这些方法可以分为以下几个类别:

  1. 数组和字符串的转换方法

    • toString():将数组转换为由逗号分隔的字符串。
    • join():将数组的所有元素连接成一个字符串,可以指定一个自定义的分隔符。
  2. 元素操作的方法

    • push():向数组末尾添加一个或多个新元素,并返回新数组的长度。
    • pop():移除数组的最后一个元素,并返回该元素的值。
    • unshift():在数组开头添加一个或多个新元素,并返回新数组的长度。
    • shift():移除数组的第一个元素,并返回该元素的值。
  3. 元素位置操作的方法

    • indexOf():返回指定元素在数组中的第一个匹配位置的索引,如果找不到则返回 -1。
    • lastIndexOf():返回指定元素在数组中最后一个匹配位置的索引,如果找不到则返回 -1。
  4. 切片操作的方法

    • slice():从原数组中提取指定的元素创建一个新数组。
    • splice():从原数组中删除、替换或插入元素,并返回被删除的元素组成的新数组。
  5. 遍历方法

    • forEach():对数组的每个元素执行指定的操作。
    • map():创建一个由原数组每个元素执行回调函数的结果组成的新数组。

上述方法提供了便捷的方式来操作和处理数组中的元素,使得我们可以添加、删除、获取和修改数组中的值。需要注意的是,使用这些方法时,有些方法会修改原始数组,而有些会返回新的数组。

参考案例

接下来,我将对上述方法进行案例代码的描述,并展示这些方法的运行结果。

案例1:使用toString()join()方法将数组转换为字符串

描述:我们有一个数组,想将它转换为字符串并打印出来。我们将使用toString()join()方法进行转换。

var arr = [1, 2, 3, 4, 5]
var arrString = arr.toString()
var arrJoined = arr.join('-')console.log(arrString) // 输出: "1,2,3,4,5"
console.log(arrJoined) // 输出: "1-2-3-4-5"

运行结果:

"1,2,3,4,5"
"1-2-3-4-5"

请添加图片描述

案例2:使用push()pop()方法添加和删除数组元素

描述:我们有一个数组,并希望使用push()方法在数组末尾添加元素,然后使用pop()方法从数组末尾删除元素。

var arr = [1, 2, 3]
arr.push(4)
var poppedElement = arr.pop()console.log(arr) // 输出:[1, 2, 3]
console.log(poppedElement) // 输出:4

运行结果:

[1, 2, 3]
4

请添加图片描述

案例3:使用indexOf()lastIndexOf()方法获取元素位置

描述:我们有一个数组,并想要获取特定元素的索引。我们将使用indexOf()方法查找第一个匹配项的索引,使用lastIndexOf()方法查找最后一个匹配项的索引。

var arr = [1, 2, 3, 2, 4]
var firstIndex = arr.indexOf(2)
var lastIndex = arr.lastIndexOf(2)console.log(firstIndex) // 输出:1
console.log(lastIndex) // 输出:3

运行结果:

1
3

请添加图片描述

案例4:使用slice()splice()方法进行切片操作

描述:我们有一个数组,并希望通过切片操作创建一个新的子数组。我们将使用slice()方法和splice()方法来实现。

var arr = [1, 2, 3, 4, 5]
var slicedArr = arr.slice(1, 4)
var splicedArr = arr.splice(2, 2, 6, 7)console.log(slicedArr) // 输出:[2, 3, 4]
console.log(splicedArr) // 输出:[3, 4]
console.log(arr) // 输出:[1, 2, 6, 7, 5]

运行结果:

[2, 3, 4]
[3, 4]
[1, 2, 6, 7, 5]

请添加图片描述

常见的位运算符有哪些?

JavaScript中常见的位运算符有以下几种:

  1. 按位与(&)
  2. 按位或(|)
  3. 按位异或(^)
  4. 按位取反(~)
  5. 左移(<<)
  6. 右移(>>)
  7. 无符号右移(>>>)

这些位运算符是用来对二进制数进行操作的,它们对二进制数中的每一位进行操作,因此被称为“位运算符”。

以下是每种位运算符的计算规则:

  1. 按位与(&):将两个数的二进制数按位进行与运算,得到的结果是一个新的二进制数,其中每一位都是两个二进制数对应位上的值相与的结果。例如,对于二进制数1010和1100进行按位与运算,结果为1000。

  2. 按位或(|):将两个数的二进制数按位进行或运算,得到的结果是一个新的二进制数,其中每一位都是两个二进制数对应位上的值相或的结果。例如,对于二进制数1010和1100进行按位或运算,结果为1110。

  3. 按位异或(^):将两个数的二进制数按位进行异或运算,得到的结果是一个新的二进制数,其中每一位都是两个二进制数对应位上的值相异或的结果。例如,对于二进制数1010和1100进行按位异或运算,结果为0110。

  4. 按位取反(~):将一个数的二进制数按位取反,得到的结果是一个新的二进制数,其中每一位都是原二进制数对应位上的值取反的结果。例如,对于二进制数1010进行按位取反运算,结果为0101。

  5. 左移(<<):将一个数的二进制数向左移动指定的位数,得到的结果是一个新的二进制数,其中低位补0。例如,对于二进制数1010进行左移两位运算,结果为101000。

  6. 右移(>>):将一个数的二进制数向右移动指定的位数,得到的结果是一个新的二进制数,其中高位补符号位。例如,对于二进制数1010进行右移两位运算,结果为000010。

  7. 无符号右移(>>>):将一个数的二进制数向右移动指定的位数,得到的结果是一个新的二进制数,其中高位补0。例如,对于二进制数1010进行无符号右移两位运算,结果为000010。

以下是一些位运算符的示例代码:

// 按位与(&)
const a = 10 // 二进制数为 1010
const b = 12 // 二进制数为 1100
const c = a & b // c的值为8,二进制数为 1000
console.log(c)// 按位或(|)
const d = a | b // d的值为14,二进制数为 1110
console.log(d)// 按位异或(^)
const e = a ^ b // e的值为6,二进制数为 0110
console.log(e)// 按位取反(~)
const f = ~a // f的值为-11,因为~a的结果是一个32位的有符号整数,需要使用补码表示
console.log(f)// 左移(<<)
const g = a << 2 // g的值为40,二进制数为 101000
console.log(g)// 右移(>>)
const h = b >> 2 // h的值为3,二进制数为 0011
console.log(h)// 无符号右移(>>>)
const i = b >>> 2 // i的值为3,二进制数为 0011
console.log(i)

请添加图片描述

总结

位运算符是用来对二进制数进行操作的,它们对二进制数中的每一位进行操作。常见的位运算符有按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)、右移(>>)和无符号右移(>>>)。每种位运算符都有自己的计算规则,可以通过对二进制数进行按位运算得到新的二进制数。在JavaScript中,位运算符可以通过使用二进制字面量或使用parseInt()函数将字符串转换为二进制数来操作二进制数。

为什么函数的 arguments 参数是类数组而不是数组?如何遍历类数组?

函数的 arguments 参数是类数组而不是数组,是因为 arguments 对象是在函数内部自动创建的,它包含了传递给函数的所有参数,无论这些参数是否被定义在函数的参数列表中。由于参数个数是不确定的,因此 arguments 对象被设计成类数组,可以通过下标来访问每个参数。

类数组对象是一种类似于数组的对象,它们具有类似于数组的下标和 length 属性,但是没有数组的原型方法。由于类数组对象不是真正的数组,因此不能使用数组的方法和属性,例如 pushpopforEach 等。但是,可以使用 for 循环、while 循环和 Array.from 方法来遍历类数组对象。

以下是一个遍历 arguments 对象的示例代码:

function sum() {let result = 0for (let i = 0; i < arguments.length; i++) {result += arguments[i]}return result
}console.log(sum(1, 2, 3, 4, 5)) // 输出 15

请添加图片描述

在这个示例代码中,sum 函数使用 for 循环遍历 arguments 对象,将每个参数的值加起来,最后返回结果。由于 arguments 对象是类数组对象,因此可以通过下标访问每个参数的值。

总结:

arguments 参数是类数组而不是数组,是因为它包含了传递给函数的所有参数,无论这些参数是否被定义在函数的参数列表中,而参数个数是不确定的。类数组对象是一种类似于数组的对象,它们具有类似于数组的下标和 length 属性,但是没有数组的原型方法。遍历类数组对象可以使用 for 循环、while 循环和 Array.from 方法。

持续学习总结记录中,回顾一下上面的内容:
JavaScript 数组有许多原生方法,包括 push()pop()shift()unshift()splice()slice()concat()join()reverse()sort()indexOf()lastIndexOf()forEach()map()filter()reduce()some()every() 等等。

常见的位运算符有 &|^~<<>>>>> 等,它们用于对数字的二进制位进行操作。

函数的 arguments 参数是类数组而不是数组,是因为 arguments 对象需要具有数组的下标访问和 length 属性等特性,但又不能是真正的数组对象,以避免出现一些不必要的问题。

遍历类数组对象可以使用 for 循环或 Array.prototype.forEach() 方法,也可以将类数组对象转换为真正的数组后使用数组的遍历方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/453663.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop-生产调优

第1章 HDFS-核心参数 1.1 NameNode内存生产配置 1&#xff09;NameNode 内存计算 每个文件块大概占用 150 byte&#xff0c;一台服务器 128G 内存为例&#xff0c;能存储多少文件块呢&#xff1f; 128 * 1024 * 1024 * 1024 / 150byte ≈ 9.1 亿G MB KB Byte 2&#xff09…

[开源]GPT Boss – 用图形化的方式部署您的私人GPT镜像网站

在这个以数据和智能为核心的时代&#xff0c;掌握最新的技术趋势是每个企业和个人都需要做到的。这就是GPT Boss存在的意义&#xff1a;一个基于OpenAI技术的一站式GPT应用解决方案。 自2022年起&#xff0c;GPT Boss团队便投身于人工智能领域&#xff0c;将OpenAI的GPT模型带给…

重写Sylar基于协程的服务器(6、HOOK模块的设计)

重写Sylar基于协程的服务器&#xff08;6、HOOK模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

034 多维数组

二维数组理解图例 示例 int[][][] nums new int[2][2][2]; Random random new Random(); for (int[][] num : nums) {for (int[] ints : num) {for (int i 0; i < ints.length; i) {// 生成100以内的随机数ints[i] random.nextInt(100);}} } for (int[][] num : nums)…

Pycharm中以chrome打开HTML文件报错: Windows找不到文件‘Chrome‘

随笔记录 目录 1. 问题描述 2. 定位问题 3. 解决方法 3.1 获取Chrome 安装路径 3.2 修改Pycharm 中Chrome的配置 4. 校验结果 1. 问题描述 Pycharm中以chrome打开HTML文件报错&#xff1a;Windows 找不到文件chrome如图所示&#xff1a; 2. 定位问题 因为Pycharm中未设…

sqli.labs靶场(41-53关)

41、第四十一关 -1 union select 1,2,3-- -1 union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schemadatabase()) -- -1 union select 1,2,(select group_concat(column_name) from information_schema.columns wher…

安泰功率放大器的技术指标有什么

功率放大器是一种电子设备&#xff0c;用于将输入信号的功率增加到更高的水平。以下是功率放大器的一些常见技术指标&#xff1a; 增益&#xff1a;增益是功率放大器将输入信号放大的程度。它通常以分贝&#xff08;dB&#xff09;为单位来表示&#xff0c;例如20dB。增益值越高…

Failed at the chromedriver@2.27.2 install script.

目录 【错误描述】Failed at the chromedriver2.27.2 install script. npm install报的错误 【解决方法】 删除node_modules文件夹npm install chromedriver --chromedriver_cdnurlhttp://cdn.npm.taobao.org/dist/chromedrivernpm install 【未解决】 下载该zip包运行这个&…

Fink CDC数据同步(五)Kafka数据同步Hive

6、Kafka同步到Hive 6.1 建映射表 通过flink sql client 建Kafka topic的映射表 CREATE TABLE kafka_user_topic(id int,name string,birth string,gender string ) WITH (connector kafka,topic flink-cdc-user,properties.bootstrap.servers 192.168.0.4:6668…

何时以及如何选择制动电阻

制动电阻的选择是优化变频器应用的关键因素 制动电阻器在变频器中是如何工作的&#xff1f; 制动电阻器在 VFD 应用中的工作原理是将电机减速到驱动器设定的精确速度。它们对于电机的快速减速特别有用。制动电阻还可以将任何多余的能量馈入 VFD&#xff0c;以提升直流母线上的…

从0开始搭建、上传npm包

从0开始搭建、上传npm包 1、上传一个简单获取水果价格的包创建 vite 项目在项目根目录 src 文件夹中创建 index.ts 文件&#xff0c;文件内容如下&#xff1a;在 main.ts 文件中导入、导出上面创建的方法创建 vite.config.ts 配置文件&#xff0c;文件内容如下配置 package.jso…

Container 命令ctr、crictl 命令

1、 Containerd和Docker的架构区别 Docker vs. Containerd&#xff1a; 2、ctr & crictl的区别 ctr是containerd的一个客户端工具 crictl 是 CRI 兼容的容器运行时命令行接口&#xff0c;可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序 crictl 则直接对…