数组、字符串、Set、Map


prtyaa
prtyaa 2023-12-26 17:19:14 65692
分类专栏: 资讯

我们开发的时候,经常用的无非就是数组、字符串、Set、Map这些东西,现在对他们做一下整体的梳理。

数组

下面的这些方法会改变原数组自身的值

Array.prototype.pop() // 删除数组的最后一个元素,并返回这个元素。
Array.prototype.push() // 在数组的末尾增加一个或多个元素,并返回数组的新长度。

Array.prototype.shift() // 删除数组的第一个元素,并返回这个元素。
Array.prototype.unshift() // 在数组的开头增加一个或多个元素,并返回数组的新长度。

Array.prototype.splice() // 在任意的位置给数组添加或删除任意个元素。

Array.prototype.sort() // 对数组元素进行排序,并返回当前数组。
Array.prototype.reverse() // 颠倒数组中元素的排列顺序,即原先的第一个变为最后一个,原先的最后一个变为第一个。

Array.prototype.fill() // 将数组中指定区间的所有元素的值,都替换成某个固定的值。
Array.prototype.copyWithin() // 在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值。

下面的这些方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值

Array.prototype.join() // 连接所有数组元素组成一个字符串,返回这个字符串。
Array.prototype.slice() // 抽取当前数组中的一段元素,返回这段元素组成的数组。
Array.prototype.concat() // 返回一个由当前数组和其它若干个数组或者组值组合而成的新数组。

Array.prototype.includes() // 判断当前数组是否包含某指定的值,如果是返回 true,否则返回 false。

Array.prototype.indexOf() // 返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。
Array.prototype.lastIndexOf() // 返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。

Array.prototype.toSource()  // 返回一个表示当前数组字面量的字符串。遮蔽了原型链上的 Object.prototype.toSource() 方法。
Array.prototype.toString() // 返回一个由所有数组元素组合而成的字符串。遮蔽了原型链上的 Object.prototype.toString() 方法。
Array.prototype.toLocaleString() // 返回一个由所有数组元素组合而成的本地化后的字符串。遮蔽了原型链上的 Object.prototype.toLocaleString() 方法。

数组的迭代方法

在下面的众多遍历方法中,有很多方法都需要指定一个回调函数作为参数。在每一个数组元素都分别执行完回调函数之前,数组的length属性会被缓存在某个地方,所以,如果你在回调函数中为当前数组添加了新的元素,那么那些新添加的元素是不会被遍历到的。

Array.prototype.forEach() // 为数组中的每个元素执行一次回调函数。

Array.prototype.map() // 返回一个由回调函数的返回值组成的新数组。
Array.prototype.reduce() // 从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。
Array.prototype.filter() // 将所有在过滤函数中返回 true 的数组元素放进一个新数组中并返回。

Array.prototype.every() // 如果数组中的每个元素都满足测试函数,则返回 true,否则返回 false。
Array.prototype.some() // 如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false。

Array.prototype.find()  // 找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回 undefined。
Array.prototype.findIndex()  // 找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回 -1。
Array.prototype.keys()  // 返回一个数组迭代器对象,该迭代器会包含所有数组元素的键。
Array.prototype.entries()  // 返回一个数组迭代器对象,该迭代器会包含所有数组元素的键值对。

字符串

字符串的常用方法

String.prototype.split() // 通过分离字符串成字串,将字符串对象分割成字符串数组。

String.prototype.substr(start, len) // 通过指定字符数返回在指定位置开始的字符串中的字符。(substr不是JavaScript核心语言的一部分,将来可能会删除,所以尽量不要用)
String.prototype.substring(start, end) // 返回在字符串中指定两个下标之间的字符。
String.prototype.slice(start, end) // 摘取一个字符串区域,返回一个新的字符串。

String.prototype.trim() // 从字符串的开始和结尾去除空格
String.prototype.concat() // 连接两个字符串文本,并返回一个新的字符串。

String.prototype.match() // 使用正则表达式与字符串相比较。
String.prototype.replace() // 被用来在正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。
String.prototype.search() // 对正则表达式和指定字符串进行匹配搜索,返回第一个出现的匹配项的下标。
String.prototype.toString() // 返回用字符串表示的特定对象。重写 Object.prototype.toString 方法。

substring和slice的区别

在substring中

  1. 如果为start > stop,则两个参数会被交换。
  2. 如果任何参数为负或NaN,则将其视为0。

在slice中

  1. 如果为start > stop,则此函数将返回一个空字符串""。
  2. 如果start为负,则从字符串末尾开始设置char。
  3. 如果stop为负,则设置stop = string.length – Math.abs(stop)

Set

  • 成员的值都是唯一的,没有重复的值
  • 可以接受一个数组(或可迭代的数据结构)作为参数

属性:

  • Set.prototype.size:返回Set实例的成员总数。

方法:

  • add(value):添加某个值,返回 Set 结构本身。因此可以链式调用,比如:s.add(1).add(2).add(2)
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值。

遍历方法

  • keys():返回键名的遍历器
  • values():返回键值的遍历器
  • entries():返回键值对的遍历器
  • forEach():使用回调函数遍历每个成员

WeakSet

WeakSet和Set的区别

  • WeakSet的成员只能是对象,而不能是其他类型的值。
  • WeakSet中的对象都是弱引用。
  • 如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存。
  • 垃圾回收机制依赖引用计数,如果一个值的引用次数不为0,垃圾回收机制就不会释放这块内存。结束使用该值之后,有时会忘记取消引用,导致内存无法释放,进而可能会引发内存泄漏。WeakSet里面的引用,都不计入垃圾回收机制,所以就不存在这个问题。因此,WeakSet适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在WeakSet里面的引用就会自动消失。
  • WeakSet不可遍历
  • 由于WeakSet内部有多少个成员,取决于垃圾回收机制有没有运行,运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的。
  • WeakSet结构中没有clear方法。

Map

类似于对象,也是键值对的集合,但是键的范围不限于字符串,各种类型的值(包括对象)都可以当作Map的键。

遍历方法 Map结构原生提供三个遍历器生成函数和一个遍历方法。

  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回所有成员的遍历器。
  • forEach():遍历 Map 的所有成员。

WeakMap

WeakMap的设计目的在于: 有时我们想在某个对象上面存放一些数据,但是这会形成对于这个对象的引用,而一旦不再需要这两个对象,我们就必须手动删除这个引用,否则垃圾回收机制就不会释放被引用对象占用的内存。 基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap。 一个典型应用场景是,在网页的DOM元素上添加数据,就可以使用WeakMap结构。当该DOM元素被清除,其所对应的WeakMap记录就会自动被移除。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=30911
赞同 0
评论 0 条
prtyaaL1
粉丝 1 发表 2554 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1504
银河麒麟打印带有图像的文档时出错  1423
银河麒麟添加打印机时,出现“server-error-internal-error”  1213
统信操作系统各版本介绍  1134
统信桌面专业版【如何查询系统安装时间】  1131
统信桌面专业版【全盘安装UOS系统】介绍  1086
麒麟系统也能完整体验微信啦!  1043
统信【启动盘制作工具】使用介绍  692
统信桌面专业版【一个U盘做多个系统启动盘】的方法  635
信刻全自动档案蓝光光盘检测一体机  542
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!