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

【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 进行高效交流。 一种方案是&#xff0c;人向模型对齐。 于是有了 「Prompt工程师」这一岗位&#xff0c;专门撰写适配 LLM 的 Prompt&#xff0c;从而让模型能够更好地生成内容。 而另一种更为有效的方案则是&#xff0c;让模型向人对齐。 这也是…...

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)

定义 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将一个请求封装为一个对象&#xff0c;从而允许用户使用不同的请求、队列或日志来参数化其他对象。命令模式也支持可撤销的操作。主要目的是将命令的发送者和接收者解耦&#xff0c;引…...

蓝桥杯官网练习题(奇怪的数列)

题目描述 从 X 星截获一份电码&#xff0c;是一些数字&#xff0c;如下&#xff1a; 13 1113 3113132113 1113122113 ⋯ YY 博士经彻夜研究&#xff0c;发现了规律&#xff1a; 第一行的数字随便是什么&#xff0c;以后每一行都是对上一行"读出来" 比如第 2…...

flink的异常concurrent.TimeoutException: Heartbeat of TaskManager with id的解决

背景 在使用flink进行集成测试时&#xff0c;我们会使用MiniClusterWithClientResource类&#xff0c;但是当我们断点导致在某个方法执行的时间比较长时&#xff0c;会有错误发生&#xff0c;那么该如何解决这个错误呢&#xff1f; 处理concurrent.TimeoutException: Heartbe…...

火电安全事故vr模拟仿真培训强交互更真实

VR消防&#xff0c;利用VR虚拟现实技术&#xff0c;将VR和消防教育融合在一起达到寓教于乐的效果&#xff0c; VR消防教育是对于家中、校园内、大型商场、公司办公室等情景产品研发的消防安全培训类VR系统软件&#xff0c;根据互动体验、互动、视角实际操作、视听觉系统多度自然…...

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#&#xff1f; C#&#xff08;读作"C sharp"&#xff09;是一种通用的、面向对象的编程语言&#xff0c;由Microsoft开发。它是一种静态类型语言&#xff0c;支持强类型检查和面向对象编程&#xff08;OOP&#xff09;的概念。C#主要用于开发Windows应用程序…...

mongodb 日志详情

1 mongodb日志简介 MongoDB的日志包括两个主要部分&#xff1a;操作日志&#xff08;oplog&#xff09;和系统日志。 1.1 操作日志 操作日志&#xff08;oplog&#xff09;是一个特殊的集合&#xff0c;用于记录所有对数据库进行的操作&#xff08;如插入、更新和删除&#x…...

Oracle中文显示???????解决办法

项目场景&#xff1a; Oracleoracle中文显示???解决办法 问题描述 原因分析&#xff1a; Oracle中文显示???通常是由于字符集不匹配或者编码问题导致的。当数据库中的数据使用的是某种字符集&#xff0c;而客户端或者应用程序使用的是另一种字符集时&#xff0c;就会出…...

Java查询数据放入word模板中并在前端导出下载

需求&#xff1a;查询数据放入word模板中并在前端导出下载 解决方法&#xff1a;在模板的位置定义参数如 {{name}} {{age}}等等&#xff0c;使用 poi 处理 伪代码&#xff1a; PostMapping("/practiceAppr")public AjaxResult practiceAppr(OutputStream outputSt…...

HarmonyOS ArkTS 应用添加弹窗(八)

概述 在我们日常使用应用的时候&#xff0c;可能会进行一些敏感的操作&#xff0c;比如删除联系人&#xff0c;这时候我们给应用添加弹窗来提示用户是否需要执行该操作&#xff0c;如下图所示&#xff1a; 弹窗是一种模态窗口&#xff0c;通常用来展示用户当前需要的或用户必须…...

排序算法-----快速排序(非递归实现)

目录 前言 快速排序 基本思路 非递归代码实现 算法分析 空间复杂度 时间复杂度 稳定性 前言 很久没跟新数据结构与算法这一栏了&#xff0c;因为数据结构与算法基本上都发布完了&#xff0c;哈哈&#xff0c;那今天我就把前面排序算法那一块的快速排序完善一下&#xff0…...

el-input限制输入整数等分析

文章目录 前言1、在 Vue 中&#xff0c;可以使用以下几种方式来限制 el-input 只能输入整数1.1 设置input 的 type为number1.2 使用inputmode1.3 使用自定义指令1.4 使用计算属性1.5 使用 onafterpaste ,onkeyup1.6 el-input-number 的precision属性 总结 前言 input 限制输入…...

医院手术麻醉信息系统全套源码,自主版权,支持二次开发

医院手术麻醉信息系统全套商业源码&#xff0c;自主版权&#xff0c;支持二次开发 手术麻醉信息系统是HIS产品的中的一个组成部分&#xff0c;主要应用于医院的麻醉科&#xff0c;属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程&#xff0c;包括手术申请与…...

canvas扩展001:利用fabric绘制图形,可以平移,旋转,放缩

canvas可以使用Fabric.js来做扩展&#xff0c;您可以在画布上创建和填充对象&#xff1b; 诸如简单几何形状之类的对象 - 矩形、圆形、椭圆形、多边形或由数百或数千条简单路径组成的更复杂的形状。 然后&#xff0c;您可以使用鼠标缩放、移动和旋转这些对象&#xff1b; 修改它…...

什么是机器学习

前言 机器学习&#xff08;Machine Learning, ML&#xff09;是一个总称&#xff0c;用于解决由各位程序员自己基于 if-else 等规则开发算法而导致成本过高的问题&#xff0c;想要通过帮助机器 「发现」 它们 「自己」 解决问题的算法来解决 &#xff0c;而不需要程序员将所有…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...