当前位置: 首页 > news >正文

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(),接收一个字符串参数,并重置该字符串的计数器。

相关文章:

JS标准库

学习一门编程语言不仅是掌握其语法。同等重要的是学习其标准库&#xff0c;从而熟练掌握语言本身提供的所有工具。 1 定型数组 js常规数组与C和Java等较低级语言的数组类型还是有很大区别。ES6新增了定型数组&#xff0c;与这些语言的低级数组非常接近。 定型数组严格来说并…...

Android 12.0 hal层添加自定义hal模块功能实现

1. 前言 在12.0的系统rom定制化开发中,在 对hal模块进行开发时,需要通过添加自定义的hal模块来实现某些功能时,就需要添加hal模块的相关功能,接下来就来实现一个案例来供参考 接下来就来具体实现这个功能 2.hal层添加自定义hal模块功能实现的核心类 hardware\interfaces…...

如何理解vue声明式渲染

Vue.js中的声明式渲染是一种用来描述用户界面的方式&#xff0c;它强调“声明”应该如何渲染页面&#xff0c;而不需要关心底层的DOM操作。这与传统的命令式渲染方式&#xff0c;即手动控制DOM元素的创建、更新和销毁&#xff0c;形成了鲜明的对比。 理解Vue的声明式渲染的关键…...

【已解决】Vue全局引入scss 个别页面不生效 / 不自动引入全局样式

项目里配置了全局样式的引入&#xff0c;今天新建了 demo 页面去修改 element 的样式&#xff0c;发现全局的样式没有引入进来。 问题原因 在此页面 没有任何样式导致的 项目在编译的时候&#xff0c;会把 .vue 文件的样式抽离到单独的 css 文件中。 当该页面没有css代码的时…...

MySQL之双主双从读写分离

一个主机 Master1 用于处理所有写请求&#xff0c;它的从机 Slave1 和另一台主机 Master2 还有它的从 机 Slave2 负责所有读请求。当 Master1 主机宕机后&#xff0c; Master2 主机负责写请求&#xff0c; Master1 、 Master2 互为备机。架构图如下 : 准备 我们…...

使用eBPF加速阿里云服务网格ASM

背景 随着云原生应用架构的快速发展&#xff0c;微服务架构已经成为了构建现代应用的主要方式之一。而在微服务架构中&#xff0c;服务间的通信变得至关重要。为了实现弹性和可伸缩性&#xff0c;许多组织开始采用服务网格技术来管理服务之间的通信。 Istio作为目前最受欢迎的…...

大型数据集处理之道:深入了解Hadoop及MapReduce原理

在大数据时代&#xff0c;处理海量数据是一项巨大挑战。而Hadoop作为一个开源的分布式计算框架&#xff0c;以其强大的处理能力和可靠性而备受推崇。本文将介绍Hadoop及MapReduce原理&#xff0c;帮助您全面了解大型数据集处理的核心技术。 Hadoop简介 Hadoop是一个基于Google…...

LCR 095. 最长公共子序列(C语言+动态规划)

1. 题目 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08…...

程序员不写注释:探讨与反思

一、为什么程序员不写注释 当程序员选择不写注释时&#xff0c;通常有一系列常见原因&#xff0c;这些原因可以影响他们的决策和行为。同时&#xff0c;这个决策可能会带来多方面的影响和后果。以下是详细阐述为什么程序员不写注释的常见原因以及这种决策可能导致的影响和后果…...

《论文阅读:Dataset Condensation with Distribution Matching》

点进去这篇文章的开源地址&#xff0c;才发现这篇文章和DC DSA居然是一个作者&#xff0c;数据浓缩写了三篇论文&#xff0c;第一篇梯度匹配&#xff0c;第二篇数据增强后梯度匹配&#xff0c;第三篇匹配数据分布。DC是匹配浓缩数据和原始数据训练一次后的梯度差&#xff0c;DS…...

免费chatGPT工具

发现很多人还是找不到好用的chatGPT工具&#xff0c;这里分享一个邮箱注册即可免费试用。 PromptsZone - 一体化人工智能平台使用 PromptsZone 与 ChatGPT、Claude、AI21 Labs、Google Bard 聊天&#xff0c;并使用 DALL-E、Stable Diffusion 和 Google Imagegen 创建图像&…...

数据分析基础:数据可视化+数据分析报告

数据分析是指通过对大量数据进行收集、整理、处理和分析&#xff0c;以发现其中的模式、趋势和关联&#xff0c;并从中提取有价值的信息和知识。 数据可视化和数据分析报告是数据分析过程中非常重要的两个环节&#xff0c;它们帮助将数据转化为易于理解和传达的形式&#xff0…...

settings.xml的文件配置大全

settings.xml 文件中最常配置的还是这几个标签 localRepository和mirrors settings.xml文件官方文档地址 <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"ht…...

极简c++(7)类的继承

为什么要用继承 子类不必复制父类的任何属性&#xff0c;已经继承下来了&#xff1b;易于维护与编写&#xff1b; 类的继承与派生 访问控制规则 一般只使用Public&#xff01; 构造函数的继承与析构函数的继承 构造函数不被继承&#xff01; 在创建子类对象的时候&…...

DOSBox和MASM汇编开发环境搭建

DOSBox和MASM汇编开发环境搭建 1 安装DOSBox2 安装MASM3 编译测试代码4 运行测试代码5 调试测试代码 本文属于《 X86指令基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 安装DOSBox 下载DOSBox和MASM&#xff1a;https://download.csdn.net/download/u011832525/884180…...

047:mapboxGL本地上传shp文件,在map上解析显示图形

第047个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中本地上传shp文件,利用shapefile读取shp数据,并在地图上显示图形。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共117行)加载shapefile.js方式…...

Windows下DataGrip连接Hive

DataGrip连接Hive 1. 启动Hadoop2. 启动hiveserver2服务3. 启动元数据服务4. 启动DG 1. 启动Hadoop 在控制台中输入start-all.cmd后&#xff0c;弹出下图4个终端&#xff08;注意终端的名字&#xff09;2. 启动hiveserver2服务 单独开一个窗口启动hiveserver2服务&#xff0c;…...

Xshell7和Xftp7超详细下载教程(包括安装及连接服务器附安装包)

1.下载 1.官网地址&#xff1a; XSHELL - NetSarang Website 选择学校免费版下载 2.将XSHELL和XFTP全都下载下来 2.安装 安装过程就是选择默认选项&#xff0c;然后无脑下一步 3.连接服务器 1.打开Xshell7&#xff0c;然后新建会话 2.填写相关信息 出现Connection establi…...

ASP.net数据从Controller传递到视图

最常见的方式是使用模型或 ViewBag。 使用模型传递数据&#xff1a; 在控制器中&#xff0c;创建一个模型对象&#xff0c;并将数据赋值给模型的属性。然后将模型传递给 View 方法。 public class HomeController : Controller {public IActionResult Index(){// 创建模型对…...

c++ 友元函数 友元类

1. 友元函数 1.1 简介 友元函数是在类的声明中声明的非成员函数&#xff0c;它被授予访问类的私有成员的权限。这意味着友元函数可以访问类的私有成员变量和私有成员函数&#xff0c;即使它们不是类的成员。 一个类中&#xff0c;可以将其他类或者函数声明为该类的友元&#…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...