ECMAScript求索 · 字符串的扩展

本文介绍了ES6中新增的字符串处理方法,如includes(), startsWith(), endsWith(), repeat(), padStart()与padEnd(),以及模板字符串的使用方法。这些新特性提升了字符串处理的效率与便利性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x01.概念

ES6对字符串的扩展主要包括原型方法 includes()startsWith()endsWith()repeat()与使用``操作符的模板字符串。可以通过在控制台打印String.prototype的方式来查看当前浏览器包含(支持)哪些原型方法。下面我们逐一学习ES6中新增加的扩展方法,额外还有在ES7中增加的 padStart()padEnd() 也将引入到本次学习的内容中。

0x02. String.prototype.includes()

在此以前,我们对字符串的操作中最常用的一个方法是 String.prototype.indexOf()String.prototype.lastIndexOf(),这两个方法分别会返回所查找的字符片段第一次出现的位置和反向第一次出现的位置,如果不包含,则返回 -1。假设现在我们有这样一个需求:判断字符 "c" 是否被包含在字符串 "abcde" 中,如果使用传统的 indexOf() 方法,我们可能会像下面代码段一样书写程序:

let str = 'abcde';

let flag = str.indexOf('c')==-1?false:true; // str.indexOf('c') 返回 2

console.log(flag); // true

现在ES6提供了新的原型方法 includes() ,该方法在字符串中寻找指定的字符片段,如果包含,则返回布尔类型值 true,反之返回 false, 使用 includes() 方法可以使我们省去了自行判断返回值的操作,直接使用该方法的返回值,从而更加方便地完成上面的需求:

let str = "abcde";

let flag = str.includes('c'); // 返回 true

console.log(flag); // true

现在详细讲解 includes() 方法:

String.prototype.includes(string, [num])

功能:在当前字符串中从指定的开始位置num[可选]寻找指定的字符片段string,如果包含,则返回布尔类型值 true,反之返回 false

参数:string   要查找的字符片段(必须)

           num     开始查找的位置(可选)

返回值类型:Boolean

 includes() 方法有两个参数,第一个为希望查找的字符片段,这个参数必须存在,否则一律返回 false,第二个参数为希望开始查找的位置,此参数为数字类型,若不是数字,则解释器默认将此参数转换为数字类型再进行操作,此参数如果不传的话则默认从字符串开始的位置进行查找。方法返回一个类型为布尔型的结果,若字符片段存在于被查找的字符串中,返回true,否则返回 false

0x03. String.prototype.startsWith()

startsWith() 方法用于判断字符串是否以指定字符片段作为开头,如果是返回 true,否则返回 false

String.prototype.startsWith(string, [num])

功能:判断当前字符串是否以指定字符片段string开始,如果是返回布尔类型值 true,反之返回 false,并且可以手动指定开始查找的位置num[可选]。

参数:string    要查找的字符片段(必须)

           num     开始查找的位置(可选)

返回值类型:Boolean

 下面举例说明:

let str = 'abcde';

let flagA = str.startsWith('a'); // true

let flagB = str.startsWith('e'); // false

let flagC = str.startsWith('e', 4); // true

let flagD = str.startsWith('ab'); // true

0x04. String.prototype.endsWith()

endsWith() 与 startsWith() 方法相类似,只不过用于判断字符串是否以指定字符片段作为结尾,如果是返回 true,否则返回 false

String.prototype.endsWith(string, [num])

功能:判断当前字符串是否以指定字符片段string结束,如果是返回布尔类型值 true,反之返回 false,并且可以手动指定查找的结束位置num[可选]。

参数:string    要查找的字符片段(必须)

           num     开始查找的位置(可选)

返回值类型:Boolean

 值得指出的是 endsWith() 中的可选参数num并不是指定开始查找的位置,而是指定查找结束的位置,举例如下:

let str = 'abcde';

let flagA = str.endsWith('e'); // true

let flagB = str.endsWith('a'); // false

let flagC = str.endsWith('c', 3); // true

let flagD = str.endsWith('de'); // true

 0x05. String.prototype.repeat()

在书写CSS样式表的时候,我们经常会用到一个关于图片背景的属性 "no-repeat" ,通过设置这个属性让图片背景不重复,那我们可以猜出 repeat() 方法用于重复字符串。

String.prototype.repeat(num)

功能:重复当前字符串指定次数num

参数:num    字符串重复的次数(必须)

返回值类型:String

 下面举例说明:

let str = 'ABC'.repeat(3); // ABCABCABC

需要注意的是,参数 num 只能使用整数类型,且不能使用负数和 Infinity ,否则解释器将会给出错误信息:Invalid count value
    at String.repeat
。另外,如果参数 num 使用了小数,那么在程序执行的过程中将会以 parseInt() 的形式取整,所以以下三个表达式是等效的:

let str = 'ABC'.repeat(3.1); // ABCABCABC

let str = 'ABC'.repeat(3); // ABCABCABC

let str = 'ABC'.repeat(3.9); // ABCABCABC

 0x06. String.prototype.padStart()

padStart() 方法是ES7标准中加入的方法,其作用是按照给定的长度与指定的字符片段和原字符串进行补全并返回。

String.prototype.padStart(length,string)

功能:使用string将字符串向前补全到length长度。

参数:length    需要补全的目标长度(必须)

           string     用于补全的字符片段(必须)

返回值类型:String

 举例说明:

let str = 'ABC'.padStart(6, 'a'); // aaaABC

let str = 'ABC'.padStart(6, 'abc'); // abcABC

let str = 'ABC'.padStart(8, 'abc'); // abcabABC

0x07. String.prototype.padEnd()

padEnd() 方法也是ES7标准中加入的方法,其作用是按照给定的长度与指定的字符片段和原字符串进行补全并返回。

String.prototype.padEnd(length,string)

功能:使用string将字符串向后补全到length长度。

参数:length    需要补全的目标长度(必须)

           string     用于补全的字符片段(必须)

返回值类型:String

  举例说明:

let str = 'ABC'.padEnd(6, 'a'); // ABCaaa

let str = 'ABC'.padEnd(6, 'abc'); // ABCabc

let str = 'ABC'.padEnd(8, 'abc'); // ABCabcab

0x07.模板字符串

模板字符串是增强型的字符串,使用反引号 ` 标识(反引号位于键盘左上角,【Esc】键的下方,【1】建的左边),使用 `` 包裹的字符串种可以使用模板语法 ${ val } 将变量直接插入字符串而不用再使用字符串连接符 + 。下面举例说明,假设我们要将变量name插入字符串中,如下使用传统写法:

let name = 'Mocha';

console.log('Hello ' + name + '. Welcome to my 优快云 blog.'); // Hello Mocha. Welcome to my 优快云 blog.

如果使用模板字符串,可以写为如下形式:

let name = 'Mocha';

console.log(`Hello ${ name }. Welcome to my 优快云 blog.`); // Hello Mocha. Welcome to my 优快云 blog.

 从例子上我们可以看出使用了模板字符串可以使用 ${ val } 将JavaScript变量很轻松地插入到一段字符串中,再结合字符串模板的另一特性,可换行,我们就可以很容易地去拼接HTML片段。如下使用传统方法:

let className = 'IDCard';
let name = 'Mocha';
let age = 18;
let htmlStr = '<div class="'+className+'">' +
    '<span>姓名</span><span>'+name+'</span>' +
    '<span>年龄</span><span>'+age+'</span>' +
    '</div>';

使用传统方法拼接HTML片段因为有太多的连接符所以极易出错,如果使用模板字符串,则如下所示:

let className = 'IDCard';
let name = 'Mocha';
let age = 18;
let htmlStr = `<div class="${className}">
                   <span>姓名</span><span>${name}</span>
                   <span>年龄</span><span>${age}</span>
               </div>`;

使用模板字符串可以提升开发的效率,并减少代码出错的可能性。

0x08.总结

以上就是在学习ES6过程中字符串扩展的一些记录,如果在描述和理解又不正确的地方,还请不吝赐教!

0x09.参考资料

MDN web docs——String

字符串的扩展 - 《ECMAScript 6 入门》——阮一峰

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值