JS标准库

 学习一门编程语言不仅是掌握其语法。同等重要的是学习其标准库,从而熟练掌握语言本身提供的所有工具。

1 定型数组

js常规数组与C和Java等较低级语言的数组类型还是有很大区别。ES6新增了定型数组,与这些语言的低级数组非常接近。

定型数组严格来说并不是数组(Array.isArray()对它们返回false),但它们实现了所有数组方法,外加几个它们自己的方法。定型数组与常规数组存在如下几个非常重要的区别:

1)定型数组的元素全部都是数值。定型数组允许指定存储在数组中的数值类型和大小。

2)创建定型数组时必须指定长度,且该长度不能再改变。

3)定型数组的元素在创建时始终都会被初始化为0。

1.1 创建定型数组

1)调用相应的构造函数,并传入一个表示数组元素个数的数值参数:

let bytes = new Uint8Array(1024);

let rgba = new Uint8ClampedArray(4);

2) 静态工厂方法of():

let point = Int16Array.of(2,4,5);

3) 静态工厂方法from():

let newPoint = Int16Array.from(point);

4) 使用ArrayBuffer 。ArrayBuffer是对一块内存的不透明引用。通过其构造函数创建,参数为想分配内存的字节数。

let buffer = new ArrayBuffer(1024 * 1024);

buffer.byteLength; // 1M内存

ArrayBuffer不允许读取或写入分配的任何字节。但是可创建使用该缓冲区内存的定型数组,通过这个数组来读取或写入内存。在调用构造定型数组的构造函数时,需要将ArrayBuffer当作第一个参数,第2个参数时该缓冲区的字节偏移量,第3个参数是数组的长度。 如果省略第2及第3个参数,则数组会使用缓冲区的所有内存。

int lastk = new Uint8Array(buffer,0, 1024 / 8);

let ints2 = new Int32Array(buffer,1024,256);

上面2个定型数组提供了对ArrayBuffer所表示内存的2个不同视图。

所有定型数组底层都有一个ArrayBuffer,即使你没明确指定。之所以需要直接指定,是因为有时可能需要一个缓冲区的多个定型数组视图。

1.2 定型数组的方法与属性

1)set() 把其他常规数组或定型数组的元素复制到当前定型数组中。第1个参数是一个数组或定型数组,第2个参数时偏移量(不指定则为0)。

let arr = new Int8Array(6);
arr.set([1,2]);
console.log(arr); // [1,2,0,0,0,0]
arr.set([3,4],1);
console.log(arr); // [1,3,4,0,0,0]

2) subarray() 返回调用它的定型数组的一部分。第1个参数表示开始位置,第2个参数结束位置。subarray()不复制内存,只返回底层值的一个新视图。

let arr = new Int8Array([1,2,3,4,5,6]);
let subArr = arr.subarray(4);
console.log(subArr); // [5,6]
arr[4] = 99;
console.log(arr); // [1,2,3,4,99,6]
console.log(subArr); // [99,6]

3) 定型数组的属性:

arr.buffer; // 定型数组的ArrayBuffer对象

arr.buffer == subArr.buffer; // true,都是同一缓冲区的视图

subArr.byteOffset; // 4, 从缓冲区的字节4开始

subArr.byteLength; // 2 视图长度为2

2 正则表达式与模式匹配

正则表达式通过RegExp对象来表示。RegExp对象可以使用RegExp()构造函数创建,但更多时通过一种特殊的字面量语法来创建:包含在一对斜杠(/)字符之间的字符,例如 /he+[2]/。

2.1 模式匹配的字符串方法

1)search(),接收一个正则表达式参数,返回第一个匹配项起点字符的位置。

"hello word.what is this?".search(/\bw/); // 6

2) replace(),第一个参数是正则表达式,第二个参数是替换字符串。如果正则表达式带g标志,则其会替换所有匹配项,否则只替换第一个匹配项。

"He said 'stop'".replace(/'([^']*)'/g,"《$1》") // He said 《stop》

replace() 第二个参数还可以是一个函数,其第一个参数是匹配的整个文本。

"He said 'stop'".replace(/(?<=')([^']*)(?=')/g,text => "《" + text + "》") //He said '《stop》'

3) match(),唯一参数是一个正则表达式。返回一个数组,包含匹配的结果,如果正则表达式没有g标志,返回的第一个元素是匹配的字符串,剩下的所有元素是正则表达式中括号分组的捕获组匹配的子字符串。

let url = /(?<protocol>\w+):\/\/(?<host>[\w.]+)\/(?<path>\S*)/;
let text = "Visit my blog at https://blog.csdn.net/qq_25308331?type=blog";
let math = text.match(url);
console.log(math[0]); // https://blog.csdn.net/qq_25308331?type=blog
console.log(math.input); // "Visit my blog at https://blog.csdn.net/qq_25308331?type=blog";
console.log(math.index); // 17
console.log(math.groups.protocol); // https
console.log(math.groups.host); // blog.csdn.net
console.log(math.groups.path); // qq_25308331?type=blog

在非全局搜索的情况下,math()返回的数组除了可以通过数组索引元素,也有一些对象属性。

4) split(),接收一个正则表达式参数,注意,如果这个正则表达式中包含捕获组,则捕获组匹配的文本也会包含在返回的数组中。

"Testing<br/>1,2,3".split(/<([^>]+)>/) // [ 'Testing', 'br/', '1,2,3' ]

2.2 RegExp类

RegExp构造函数第一个参数是正则表达式,第二个参数代表正则表达式的标志:g 全局性,i 不区分大小写,m 以多行模式进行,s与m类似。这些标志可以任意组合。

1)test(),接收一个字符串,如果匹配则返回true。

/h[1-3]/.test("h34"); // true

2) exec(),接收一个字符串,如果没有找到匹配项,则返回null。如果找到,则返回一个数组,跟字符串的match()方法在非全局搜索时返回的数组一样。(无论是否有g标志,都只返回同样数组)。

3 其他函数

3.1 集合与映射

js的Object类型是一种万能结构,可用于把字符串(对象的属性名)映射为任意值。对象在js编程中经常被用作映射和集合,但却要受到对字符串约束的限制,另外对象正常都会继承带名字的属性。这些特征明显不是为映射和集合准备的。

ES6新增了真正的Set和Map类。

3.1.1 Set类

与数组类似,但集合没有索引,也不允许重复。

集合成员根据严格相等来判断是否重复的。

let set. = new Set();

set.add({}).add({}); // 添加了两个元素,因为这两个元素不等。

Set 最重要的是用来检查某个值是不是集合的成员(has()方法),该方法比数组的includes()方法执行速度快得多。

3.1.2 WeakMap和WeakSet

WeakMap(弱映射) 是Map类的一个变体(不是子类)。它不会阻止元素被当作垃圾收集。

WeakMap的主要用途是实现值与对象的关联而不导致内存泄露。

3.2 控制台API

console.trace(),会像console.log()一样打印它的参数,此外在输出之后还会打印栈跟踪信息。

console.count(),这个函数接收一个字符串参数,并打印该字符串,后面跟着已经通过该字符串调用的次数。在调试事件处理程序时,可以通过它来知道事件处理程序被触发的次数。

for (let i = 0; i < 5; i++) {
    console.count("hello");
}
// hello: 1
// hello: 2
// hello: 3
// hello: 4
// hello: 5

console.countReset(),接收一个字符串参数,并重置该字符串的计数器。

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

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

相关文章

1.11.C++项目:仿muduo库实现并发服务器之LoopThread的设计

文章目录 一、LoopThread模块二、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&#xff08;三&#xff09;功能设计 三、代码 一、LoopThread模块 目标&#xff1a;将eventloop模块和线程整合起来&#xff01; eventloop 和 线程是一一对应的&#…

ruoyi 若依 前端vue npm install 运行vue前端

1. 安装jdk ​​​​​​​https://blog.csdn.net/torpidcat/article/details/90549551 2. nginx 3. mysql 4. redis 首次导入&#xff0c;需要先执行 npm install #进入到前端模块目录下 cd ruoyi-ui # 安装 npm install 启动后端项目 运行前端项目&#xff1a;运行成功…

时序数据库InfluxDB了解

参考&#xff1a;https://blog.csdn.net/u014265785/article/details/126951221

【Pytorch】深度学习之优化器

文章目录 Pytorch提供的优化器所有优化器的基类Optimizer 实际操作实验参考资料 优化器 根据网络反向传播的梯度信息来更新网络的参数&#xff0c;以起到降低loss函数计算值&#xff0c;使得模型输出更加接近真实标签的工具 学习目标 Pytorch提供的优化器 优化器的库torch.opt…

JVM:虚拟机类加载机制

JVM:虚拟机类加载机制 什么是JVM的类加载 众所周知&#xff0c;Java是面向对象编程的一门语言&#xff0c;每一个对象都是一个类的实例。所谓类加载&#xff0c;就是JVM虚拟机把描述类的数据从class文件加载到内存&#xff0c;并对数据进行校验&#xff0c;转换解析和初始化&a…

【yolov5】改进系列——特征图可视化(V7.0 的一个小bug)

文章目录 前言一、特征图可视化1.1 V7.0的小bug 二、可视化指定层三、合并通道可视化总结 前言 对于特征图可视化感兴趣可以参考我的另一篇记录&#xff1a;六行代码实现&#xff1a;特征图提取与特征图可视化&#xff0c;可以实现分类网络的特征图可视化 最近忙论文&#xf…

使用JAVA发送邮件

这里用java代码编写发送邮件我采用jar包&#xff0c;需要先点击这里下载三个jar包&#xff1a;这三个包分别为&#xff1a;additionnal.jar&#xff1b;activation.jar&#xff1b;mail.jar。这三个包缺一不可&#xff0c;如果少添加或未添加均会报下面这个错误&#xff1a; C…

School‘s Java test

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;第四周素数和念整数 &#…

导入Maven项目遇到的一些问题及解决

开发工具是IDEA&#xff0c; 一个Maven项目初次导入IDEA中&#xff0c;需要注意的几件事&#xff1a; 设置项目的编码格式&#xff08;或者提前设置全局的编码格式&#xff09;&#xff0c;一般是UTF-8&#xff1b;检查JDK版本和编译级别&#xff1b;检查Maven的版本&#xf…

公司要做大数据可视化看板,除了EXCEL以外有没有好用的软件可以用

当企业需要进行大数据可视化看板的设计和开发时&#xff0c;除了Excel&#xff0c;还有许多其他强大且适合大数据可视化的软件工具。以下是几种常用的好用软件&#xff0c;以及它们的特点和优势&#xff0c;供您参考。 一、Datainside 特点和优势&#xff1a; - **易于使用**…

【Java】Math 类

java.lang.Math&#xff08;类&#xff09;&#xff1a;Math包含执行基本数字运算的方法。它不能创建对象&#xff0c;它的构造方法被"私有"了。因为它内部都是“静态方法”&#xff0c;通过“类名”直接调用即可。 方法名称说明public static int abs(E e)返回绝对值…

爬虫feaplat平台-搭建

流程说明&#xff1a; 安装docker 启动docker-swarm 安装docker-compose 下载feaplat源代码 docker-compose启动 step1&#xff1a;安装指定版本的docker 如果之前有安装过docker&#xff0c;需要先删除原有的docker sudo yum remove docker \docker-client \docker-client-l…

C++类总结

参考&#xff1a; C中的private, public, protected_c private-CSDN博客https://www.cnblogs.com/corineru/p/11001242.html C 中 Private、Public 和 Protected 的区别 Private Public Protected 声明为private类成员只能由基类内部的函数访问。 可以从任何地方访问声明…

# Web server failed to start. Port 9793 was already in use

Web server failed to start. Port 9793 was already in use. 文章目录 Web server failed to start. Port 9793 was already in use.报错描述报错原因解决方法Spring Boot 修改默认端口号关闭占用某一端口号的进程关闭该进程 报错描述 Springboot项目启动控制台报错 Error st…

使用Plotly可视化

显示项目受欢迎程度 改进图表 设置颜色&#xff0c;字体

尿检设备“智能之眼”:维视智造推出MV-MC 系列医疗专用相机

​ 尿液分析是临床检验的基础常规项目&#xff0c;随着医疗设备的不断发展&#xff0c;尿液分析相关仪器的国产化和自动化程度也进一步提升。2022 年国内尿液分析市场的规模约为 28 亿元&#xff0c;激烈的竞争推动了尿检仪器自动化、智能化升级&#xff0c;在仪器中加入机器视…

lc42接雨水详解

1 42. 接雨水 接雨水 2 推荐阅读的解析 《接雨水》详细通俗的思路分析&#xff0c;多解法 推荐观看方法&#xff1a;二、三和四 3 不懂的地方-方法四的一个判断条件 以下是疑问的地方 height [ left - 1] 是可能成为 max_left 的变量&#xff0c; 同理&#xff0c;height…

ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的问题解决

winR打开窗口输入 services.msc 停止mysql 找到data文件&#xff0c;清空其中全部文件。没有data文件&#xff0c;手动创建 ​ 输入 mysqld --remove mysql 移除服务&#xff1b; 注册服务&#xff0c;mysqld -install&#xff1b; 并开始初始化&#xff0c;mysqld --initi…

从零开始学习调用百度地图网页API:一、注册百度地图账号

目录 注册账号申请AK 注册账号 https://lbsyun.baidu.com/index.php?titlejspopular3.0/guide/getkey JavaScript API只支持浏览器类型的ak 申请AK 注&#xff1a;使用示例时&#xff0c;需要在百度地图示例加上https:&#xff0c;替换ak。

HashMap 与 HashTable 区别

HashMap HashMap是一个基于 hash 表实现的 K-V 结构的集合。HashMap 是 JDK1.2 引入的一个线程不安全的集合类。 HashMap 内部是采用了数组加链表实现&#xff0c;在 JDK1.8 版本里面做了优化&#xff0c;引入了红黑树。当链表长度大于等于 8 并且数组长度大于 64 的时候&…