【04】ES6:字符串的扩展
一、模板字符串
模板字符串是可以插入表达式的字符串字面量。模板字符串和传统字符串比较,存在以下特点:
1、使用反单引号
传统字符串字面量使用单引号 ‘’ 或者双引号 “”,模板字符串使用反单引号(backquote) ``
const str1 = 'hello world'
const str2 = `hello world`
console.log(str1, str2, str1 === str2)
// hello world, hello world, true
2、插入表达式
模板字符串可以插入表达式,通过 ${expression} 形式插入表达式
expression 可以是任意常量、变量、函数调用。在 ${expression} 前后,也可以有任意的其他合法的字符,例如 `abc${expression}dfg` 。最终,${expression} 会转化为字符串和前后的字符串拼接,如果有的话。
const person = {name: '小明',age: 14,sex: '男'
}// 传统字符串写法
const info = '姓名是:' + person.name +', 年龄是:' + person.age +', 性别:' + person.sex// 模板字符串写法
// const info = `姓名是:${person.name}, 年龄是:${person.age}, 性别:${person.sex}` console.log(info)
// 姓名是:小明, 年龄是:14, 性别:男
3、模板字符串可以有多行文本
模板字符串中,所有的空格、换行或缩进都会被保存在输出中
// 一般字符串
const info = '第一行\n第二行'// 模板字符串
const info = `第一行
第二行` // 注意不能有缩进console.log(info)
/*
第一行
第二行
*/
二、字符串的新增方法
字符串的所有方法都不会改变原字符串
1、includes()、startsWith()、endsWith()
传统上,JavaScript 只有 indexOf 和 lastIndexOf 方法,可以用来确定一个字符串是否包含在另一个字符串中。
- str.indexOf(str, [start]) :字符串索引,返回检索字符在字符串中首次出现位置,没有找的返回-1。从字符串开头开始,start表示开始搜索的位置,默认为0第一项。
- str.lastIndexOf(str, [start]):字符串索引,返回检索字符在字符串中首次出现位置,没有找的返回-1。从字符串结尾开始,start表示开始搜索的位置,默认从array.length-1开始检索。
ES6 新增了三种方法:
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
let s = 'Hello world!'s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true// 这三个方法都支持第二个参数,表示开始搜索的位置。
s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false
2、repeat()
repeat() 方法返回一个新字符串,表示将原字符串重复 n 次。
'x'.repeat(3) // 'xxx'
'hello'.repeat(2) // 'hellohello'
'na'.repeat(0) // ''
当 repeat 的参数不为正整数 和 0 时的情况:
// 参数是小数,会被取整
'na'.repeat(2.9) // 'nana'// 参数是负数或者 Infinity,会报错
'na'.repeat(Infinity) // RangeError
'na'.repeat(-1) // RangeError// 参数是 0 到-1 之间的小数,则等同于 0。因为会先进行取整运算,取整以后等于 -0,repeat 视同为 0。
'na'.repeat(-0.9) // ''// 参数 NaN 等同于 0
'na'.repeat(NaN) // ''// 参数是字符串,则会先转换成数字
'na'.repeat('na') // ''
'na'.repeat('3') // 'nanana'
3、padStart()、padEnd()
ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全,返回补全后达到指定长度的字符串。
padStart(targetLength, [str])用于头部补全,padEnd(targetLength, [str])用于尾部补全。targetLength 为字符串补全生效的最大长度, str 是用来补全的字符串,默认为空格。
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax''x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba''x'.padStart(4) // ' x'
'x'.padEnd(4) // 'x '// 如果原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串
'xxx'.padStart(2, 'ab') // 'xxx'
'xx'.padEnd(2, 'ab') // 'xx'// 如果用来补全的字符串与原字符串,两者的长度之和超过了最大长度,则会截去超出位数的补全字符串。
'abc'.padStart(10, '0123456789') // '0123456abc'
常见用途:为数值补全指定位数、提示字符串格式、日期格式化
// 生成 10 位的数值字符串
'1'.padStart(10, '0') // '0000000001'
'12'.padStart(10, '0') // '0000000012'
'123456'.padStart(10, '0') // '0000000012''12'.padStart(10, 'YYYY-MM-DD') // 'YYYY-MM-12'
'09-12'.padStart(10, 'YYYY-MM-DD') // 'YYYY-09-12'
/*** 格式化日期* @param {Object} date new Date()* @param {Object} fmt 格式、'YYYY年mm月dd日 HH:MM:SS'*/
export const dataFormat = (date, fmt) => {let retconst opt = {'Y+': date.getFullYear().toString(), // 年'm+': (date.getMonth() + 1).toString(), // 月'd+': date.getDate().toString(), // 日'H+': date.getHours().toString(), // 时'M+': date.getMinutes().toString(), // 分'S+': date.getSeconds().toString() // 秒}for (let k in opt) {ret = new RegExp('(' + k + ')').exec(fmt)if (ret) {fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))}}return fmt
}
4、trimStart()、trimEnd()
trimStart() 和 trimEnd() 这两个方法,它们的行为与 trim() 一致,trimStart() 消除字符串头部的空格,trimEnd() 消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。
const s = ' abc 's.trim() // 'abc'
s.trimStart() // 'abc '
s.trimEnd() // ' abc'
除了空格键,这两个方法对字符串头部(或尾部)的 tab 键、换行符等不可见的空白符号也有效。
浏览器还部署了额外的两个方法,trimLeft() 是 trimStart() 的别名,trimRight() 是trimEnd() 的别名。
5、at()
at() 方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置)。
const str = 'hello'
str.at(1) // 'e' (等价 str[1])
str.at(-1) // 'o' (str[-1] 返回 undefined)
str.at(7) // undefined (等价 str[7])
如果参数位置超出了字符串范围,at() 返回 undefined。
相关文章:
【04】ES6:字符串的扩展
一、模板字符串 模板字符串是可以插入表达式的字符串字面量。模板字符串和传统字符串比较,存在以下特点: 1、使用反单引号 传统字符串字面量使用单引号 ‘’ 或者双引号 “”,模板字符串使用反单引号(backquote) …...
Docker可视化管理界面工具Portainer安装
Portainer是Docker容器管理界面工具,可以直观的管理Docker。 部署也很简单: 官方安装文档地址 1、创建数据卷 docker volume create portainer_data2、下载允许容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /v…...
css实现水波纹效果
css实现水波纹效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…...
一种全新且灵活的 Prompt 对齐优化技术
并非所有人都熟知如何与 LLM 进行高效交流。 一种方案是,人向模型对齐。 于是有了 「Prompt工程师」这一岗位,专门撰写适配 LLM 的 Prompt,从而让模型能够更好地生成内容。 而另一种更为有效的方案则是,让模型向人对齐。 这也是…...
8:kotlin 类型检查和转换(Type checks and casts)
在运行时可以执行类型检查以检查对象的类型。类型转换将对象强制转换为不同的类型 is 和 !is 可以使用is或者!is来判断实例是不是指定的类型 fun main() {var obj : Any "cast"if (obj is String) {println(obj.length) // 4}obj 123if (obj !is String) { pr…...
命令模式 (Command Pattern)
定义 命令模式(Command Pattern)是一种行为型设计模式,它将一个请求封装为一个对象,从而允许用户使用不同的请求、队列或日志来参数化其他对象。命令模式也支持可撤销的操作。主要目的是将命令的发送者和接收者解耦,引…...
蓝桥杯官网练习题(奇怪的数列)
题目描述 从 X 星截获一份电码,是一些数字,如下: 13 1113 3113132113 1113122113 ⋯ YY 博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行"读出来" 比如第 2…...
flink的异常concurrent.TimeoutException: Heartbeat of TaskManager with id的解决
背景 在使用flink进行集成测试时,我们会使用MiniClusterWithClientResource类,但是当我们断点导致在某个方法执行的时间比较长时,会有错误发生,那么该如何解决这个错误呢? 处理concurrent.TimeoutException: Heartbe…...
火电安全事故vr模拟仿真培训强交互更真实
VR消防,利用VR虚拟现实技术,将VR和消防教育融合在一起达到寓教于乐的效果, VR消防教育是对于家中、校园内、大型商场、公司办公室等情景产品研发的消防安全培训类VR系统软件,根据互动体验、互动、视角实际操作、视听觉系统多度自然…...
ELK企业级日志分析平台
目录 一、elasticsearch 1、集群部署 2、cerebro部署 3、elasticsearch-head插件部署 4、elasticsearch集群角色分类 二、logstash 1、部署 2、elasticsearch输出插件 3、file输入插件 4、file输出插件 5、syslog 插件 6、多行过滤插件 7、grok过滤 三、kibana数…...
.NET面试题1
1.什么是C#? C#(读作"C sharp")是一种通用的、面向对象的编程语言,由Microsoft开发。它是一种静态类型语言,支持强类型检查和面向对象编程(OOP)的概念。C#主要用于开发Windows应用程序…...
mongodb 日志详情
1 mongodb日志简介 MongoDB的日志包括两个主要部分:操作日志(oplog)和系统日志。 1.1 操作日志 操作日志(oplog)是一个特殊的集合,用于记录所有对数据库进行的操作(如插入、更新和删除&#x…...
Oracle中文显示???????解决办法
项目场景: Oracleoracle中文显示???解决办法 问题描述 原因分析: Oracle中文显示???通常是由于字符集不匹配或者编码问题导致的。当数据库中的数据使用的是某种字符集,而客户端或者应用程序使用的是另一种字符集时,就会出…...
Java查询数据放入word模板中并在前端导出下载
需求:查询数据放入word模板中并在前端导出下载 解决方法:在模板的位置定义参数如 {{name}} {{age}}等等,使用 poi 处理 伪代码: PostMapping("/practiceAppr")public AjaxResult practiceAppr(OutputStream outputSt…...
HarmonyOS ArkTS 应用添加弹窗(八)
概述 在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种模态窗口,通常用来展示用户当前需要的或用户必须…...
排序算法-----快速排序(非递归实现)
目录 前言 快速排序 基本思路 非递归代码实现 算法分析 空间复杂度 时间复杂度 稳定性 前言 很久没跟新数据结构与算法这一栏了,因为数据结构与算法基本上都发布完了,哈哈,那今天我就把前面排序算法那一块的快速排序完善一下࿰…...
el-input限制输入整数等分析
文章目录 前言1、在 Vue 中,可以使用以下几种方式来限制 el-input 只能输入整数1.1 设置input 的 type为number1.2 使用inputmode1.3 使用自定义指令1.4 使用计算属性1.5 使用 onafterpaste ,onkeyup1.6 el-input-number 的precision属性 总结 前言 input 限制输入…...
医院手术麻醉信息系统全套源码,自主版权,支持二次开发
医院手术麻醉信息系统全套商业源码,自主版权,支持二次开发 手术麻醉信息系统是HIS产品的中的一个组成部分,主要应用于医院的麻醉科,属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程,包括手术申请与…...
canvas扩展001:利用fabric绘制图形,可以平移,旋转,放缩
canvas可以使用Fabric.js来做扩展,您可以在画布上创建和填充对象; 诸如简单几何形状之类的对象 - 矩形、圆形、椭圆形、多边形或由数百或数千条简单路径组成的更复杂的形状。 然后,您可以使用鼠标缩放、移动和旋转这些对象; 修改它…...
什么是机器学习
前言 机器学习(Machine Learning, ML)是一个总称,用于解决由各位程序员自己基于 if-else 等规则开发算法而导致成本过高的问题,想要通过帮助机器 「发现」 它们 「自己」 解决问题的算法来解决 ,而不需要程序员将所有…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
统计按位或能得到最大值的子集数目
我们先来看题目描述: 给你一个整数数组 nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素(或不删除)得到,…...
rk3506上移植lvgl应用
本文档介绍如何在开发板上运行以及移植LVGL。 1. 移植准备 硬件环境:开发板及其配套屏幕 开发板镜像 主机环境:Ubuntu 22.04.5 2. LVGL启动 出厂系统默认配置了 LVGL,并且上电之后默认会启动 一个LVGL应用 。 LVGL 的启动脚本为/etc/init.d/pre_init/S00-lv_demo,…...
