勇宝趣学JavaScript ES6第三章(字符串的拓展)

已经写到系列教程的第三章了,本章节我们一起来探讨字符串的那些事。在我们的日常工作中,经常会用到模板字符串,还有一些字符串方法,我们今天就来好好的品一品。

谢谢大家的点赞和收藏。

在这里插入图片描述

文章目录

  • 一、字符串的方法
    • 1.1 charAt和charCodeAt
    • 1.2 includes、startsWith、endsWith
    • 1.3 repeat
    • 1.4 padStart、padEnd
  • 二、模板字符串
    • 2.1 基本用法
    • 2.2 ${}
  • 三、标签模板
    • 3.1 raw静态方法
  • 四、总结

一、字符串的方法

说到字符串,我们就会自然而然的想到Unicode编码。像\u0061代表的是字母a,但是Unicode是有一个范围的(\u0000~\uFFFF)。在JavaScript中1个字符占用两个字节。如果在范围内就是一个字符,如果超出这个范围,JavaScript必须2个字符来进行表示。

1.1 charAt和charCodeAt

1个字符占两个字节,我们可以使用charCodeAt打印出字符的Unicode编码,charAt是打印对应下标字符的值。

let str = 'iyongbao';console.log(str.charCodeAt(0)); // 105
console.log(str.charAt(1)); // y

1.2 includes、startsWith、endsWith

三个方法的返回值均为boolean

  1. 试想一下在ES5中我们是怎么来判断字符串是否包含某一字符的?

    let str = 'iyongbao';console.log(str.indexOf('a') !== -1); // true
    console.log(str.indexOf('z') !== -1); // false
    

    这里我只写了一种,使用indexOf方法来判断,通过返回值来进行判断。如果找到返回对应下标,如果没找到则返回-1

    ES6中为我们提供了includes方法来判断是否存在某一字符,返回值为boolean

    let str = 'iyongbao';console.log(str.includes('a')); // true
    console.log(str.includes('z')); // false
    
  2. 使用startWith/endsWith来判断是否以某一字符串开头/结尾

    let str = 'Hello World!';console.log(str.startsWith('Hello')); // true
    console.log(str.endsWith('!')); // true
    
  3. startWith/endsWith两个方法有第二个参数,表示从什么位置开始‘截取’

    let str = 'Hello World!';console.log(str.startsWith('World', 6)); // true
    console.log(str.endsWith('Hello', 5)); // true
    
    • startWith表示从下标6开始为起点一直到最后。
    • endsWith表示从下标5开始到字符串最开头。

1.3 repeat

  1. repeat方法,顾名思义就是重复的意思。它可以使我们的字符串重复n次。

    let str = 'a'.repeat(3); 
    let str1 = 'a'.repeat(0);console.log(str); // aaa
    console.log(str1); // ''
    
  2. 如果参数为小数,则会向下取整

    let str = 'a'.repeat(6.6);console.log(str); // aaaaaa
    
  3. 如果我们传入小于等于-1负数或者是Infinity报错,传入0~-1之间的小数,不报错

    let str = 'a'.repeat(-0.8);
    let str1 = 'a'.repeat(-1.2);
    let str2 = 'a'.repeat(Infinity);console.log(str); // ''
    console.log(str1); // RangeError: Invalid count value: -1.2
    console.log(str2); // RangeError: Invalid count value: Infinity
    

1.4 padStart、padEnd

这两个方法的作用是补全,一般用的最多的就是时间补0

let str = 'a';
let str1 = 'b';console.log(str.padStart(5, 0)); // 0000a
console.log(str.padEnd(5, 0)); // a0000

两个方法的参数第一个参数表示字符串长度第二个参数表示如果长度不够补充字符串

二、模板字符串

模板字符串在我们的编码中经常用到,确实很方便相比我们之前ES5中的字符串拼接

2.1 基本用法

  1. 在之前如果我们想输出一些带变量的字符串可能我们需要像下边这样。

    let name = 'iyongbao';
    let age = 26;let str = '我叫' + name + ', 我今年' + age + '岁啦。'console.log(str); // 我叫iyongbao, 我今年26岁啦。
    

    可以看到这种写法很浪费时间和功夫,如果内容一多了,就会缺这少那的。

  2. 使用ES6模板字符串会是怎样的呢?

    let name = 'iyongbao';
    let age = 26;let str = `我叫${name}, 我今年${age}岁啦。`console.log(str); // 我叫iyongbao, 我今年26岁啦。
    

    这样看着舒服多啦,我们使用两个反引号’`',变量使用${变量名}。值得注意的是,如果在模板字符串中想要表示多行字符串,所有的空格和缩进换行都会被保留在输出中。

    let name = 'iyongbao';
    let age = 26;let str = `我叫${name},
    我今年${age}岁啦。`console.log(str);
    

在这里插入图片描述

2.2 ${}

  1. 如果我们想在模板字符串中输入变量,需要使用${},我们可以在${}书写任意的JavaScript表达式

    let a = 1;
    let b = 2;let str = `a + b = ${ a + b}`;console.log(str); // a + b = 3
    
  2. 还可以获取对象的属性

    let obj = {name: 'iyongbao',age: 26
    }let str = `${obj.name} -- ${obj.age}`;console.log(str); // iyongbao -- 26
    
  3. 我们还可以在模板字符串中调用函数

    function add (a, b) {return a + b;
    }let str = `得到的结果为:${add(1, 2)}`;console.log(str); // 得到的结果为:3
    

    注意:当我们使用${}的时候,其实JavaScript底层调用了变量的toString()方法。

三、标签模板

这个知识点大家可能会陌生,我简单和大家讲一讲,这里的标签说的其实是函数模板说的就是字符串,给大家演示一个新颖的函数调用写法。

function foo (array, ...obj) {console.log(array, obj);
}let name = 'iyongbao';
let age = 26;foo`iyongbao ${name} age ${age}`; // ['iyongbao ', ' age ', '', raw: Array(3)] (2) ['iyongbao', 26]

我给大家分析一下结果:我定义了一个函数,这个函数有两个参数array打印的是一个数组...obj接收剩余参数。

  • 第一个参数里边的模板字符串中那些没有被变量替换
  • 第二个参数是模板字符串中变量的值
  • 大家发现array中有一个raw属性,这里边存放的是转移后的原字符串。

foo`iyongbao ${name} age ${age}`换成我们常见的写法如下:

foo(['iyongbao ', ’ age ', ‘’], iyongbao, 26);

3.1 raw静态方法

  1. 这个方法虽然陌生但是很有用,在我们的工作中,经常碰到转义的问题:

    let path = `C:\work\network`;console.log(path);
    

    在这里插入图片描述

    我们发现通过console.log之后结果换行了。我们只能不让\转移。

    let path = `C:\\work\\network`;console.log(path);
    

    在这里插入图片描述

  2. 在我们的String上有一个静态方法raw,可以帮助我们完成上边的操作。

    let res = String.raw`C:\work\network`;console.log(res);
    

在这里插入图片描述

  1. 上边的方式用的还是少,一般都是后端传给我们前端处理后直接进行显示的,但是这种情况还是会转移。还是用正则处理一下吧,哈哈。

    let path = "C:\work\network";let res = String.raw`${path}`;console.log(res);
    

四、总结

今天又和大家探讨了一下ES6中关于字符串的一些扩展知识点,有些用的确实少,反正是学海无涯。欢迎各位小伙伴指正批评。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

消息队列-RabbitMQ:延迟队列、rabbitmq 插件方式实现延迟队列、整合SpringBoot

十六、延迟队列 1、延迟队列概念 延时队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。 延…

软考45-上午题-【数据库】-数据操纵语言DML

一、INSERT插入语句 向SQL的基本表中插入数据有两种方式: ①直接插入元组值 ②插入一个查询的结果值 1-1、直接插入元组值 【注意】: 列名序列是可选的,若是所有列都要插入数值,则可以不写列名序列。 示例: 1-2、插…

暑期宅家?计算机专业必看的8部电影!一定要安利给你们!

代码编程看上去枯燥乏味,但也是艺术的,感性的,计算机编程的许多概念被应用于电影中,其中有些非常之酷炫,它们甚至能帮助开发人员理解一些编程概念。 所以今天学姐来给大家推荐几部心中top级的编程人必看电影&#xff0…

matlab倒立摆小车LQR控制动画

1、内容简介 略 54-可以交流、咨询、答疑 2、内容说明 略 摆杆长度为 L,质量为 m 的单级倒立摆(摆杆的质心在杆的中心处),小车的质量为 M。在水平方向施加控制力 u,相对参考系产生位移为 y。为了简化问题并且保其实质不变,忽…

数据结构:链表的冒泡排序

法一:修改指针指向 //法二 void maopao_link(link_p H){if(HNULL){printf("头节点为空\n");return;}if(link_empty(H)){printf("链表为空\n");return;}link_p tailNULL;while(H->next->next!tail){link_p pH;link_p qH->next;while(q…

抖音视频提取软件使用功能|抖音视频下载工具

我们的抖音视频提取软件是一款功能强大、易于操作的工具,旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们的软件支持通过关键词搜索和分享链接两种方式获取抖音视频,方便用户快速找到自己感兴趣的内容。 主要功能模块:…

进程线程信号通道

4> 使用消息队列完成两个进程间相互通信 usr1代码&#xff1a; #include <myhead.h> //定义一个消息类型 struct msgbuf {long mtype;//消息类型char mtext[1024];//消息正文 }; #define MSGSIZE sizeof(struct msgbuf)-sizeof(long) int main(int argc, const char …

物奇ENC算法开关接口修改方法

物奇ENC算法开关接口修改 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送语音信号处理降噪算法&#xff0c;蓝牙耳机音频&#xff0c;DSP音频项目核心开发资料, 1 配置工具事件接口 2 代…

K线实战分析系列之十一:行情力量不足——平头形态

K线实战分析系列之十一&#xff1a;行情力量不足——平头形态 一、平头形态二、不同形态与平头形态的叠加三、总结平头形态 一、平头形态 前一根K线具有较长的实体&#xff0c;后一根K线的实体比较小&#xff0c;无论是多头还是空头的力量到第二根K线都被瓦解了多头上攻&#…

初识51单片机

##江科大51单片机学习 什么是单片机&#xff1f;&#xff1f;&#xff1f; 单片机&#xff0c;英文名&#xff0c;Micro Controller Unit&#xff0c;简称MCU&#xff08;tips&#xff1a;有人会简称它为CPU&#xff0c;但不是如此&#xff0c;CPU其实被集成在MCU中&#xff…

【牛客】【刷题节】美团2024届秋招笔试第二场编程真题

1.小美的加法【简单题】 题意理解&#xff1a; 给定一个数组做连加操作&#xff0c;其中只能将一个加号变成乘号 将哪个加号变成乘号&#xff0c;使式子最后的结果最大 解题思路&#xff1a; 只有将两个相邻且乘机最大的数之间变成乘号后&#xff0c;才能保证整个式子结果最大 …

微服务知识02

1、九大高并发解决方案 2、系统架构图​​​​​​​ 3、分布式事务 本地事务、分布式事务 操作不同服务器的数据库&#xff08;垂直分库&#xff09; 4、分布式事务解决方案&#xff08;没有seata之前&#xff09; &#xff08;1&#xff09;XA协议&#xff08;强一致性&a…

【Java程序员面试专栏 算法思维】三 高频面试算法题:搜索算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊搜索算法,以岛屿问题为切入点练习,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间岛屿数量网格搜索分别向上下左右四个方向探索,遇到海…

1分钟带你学会Python的pass关键字和range函数

1.pass 关键字 pass关键字在 python 中没有任何实际意义&#xff0c;主要是用来完成占位的操作&#xff0c;保证语句的完整性 age int(input(请输入您的年龄&#xff1a;))if age > 18: pass # pass 在此处没有任何意义&#xff0c;只是占位 print(欢迎光临。。。…

Pillow:一个超实用的Python图像处理库

目录 Pillow 引言 Pillow库简介 Pillow的主要功能 1. 图像打开、保存和格式转换 2. 图像增强 3. 几何变换 4. 色彩空间转换 5. 图像分析和处理 Pillow的应用场景 1. 网页图像处理 2. 图像编辑工具 3. 计算机视觉和机器学习

个人IP的核心竞争力是什么?

做个人IP最重要的一点就是学会展示&#xff01; 可以利用网络“链接关系”&#xff0c;通过内容大方分享自己的观点、知识、经验等&#xff0c;以利他思维获取用户信任&#xff0c;从而链接到用户群体。 为什么要展示&#xff1f; 1、吸引同频用户 2、低成本高效率获客 3、…

conda 导出/导出配置好的虚拟环境

一. 导出环境配置&#xff08;yml文件&#xff09; 1. 在主目录下激活虚拟环境&#xff08;UE4是我的虚拟环境名称&#xff0c;请根据你自己的名称进行修改&#xff09; conda activate UE4 2. 运行此代码 conda env export > environment.yml 二. 导入环境配置&#xf…

WSL2配置Linux、Docker、VS Code、zsh、oh my zsh(附Docker开机自启设置)

0. 写在前面 本篇笔记来自于UP主麦兜搞IT的合集视频Windows10开发环境搭建中的部分内容 1. 安装WSL2 按照微软官方文档进行操作&#xff0c;当然也可以直接wsl --install 也可以按照 旧版手动安装的步骤 来进行操作 选择安装的是Ubuntu 20.04 LTS 注&#xff1a;WSL默认安装…

“曲线图揭示收支秘密:让你的支出开销一目了然!“

在繁忙的现代生活中&#xff0c;我们每个人的支出开销都如同一部复杂的交响乐&#xff0c;需要细致入微的管理和分析。而曲线图作为一种直观、易懂的视觉工具&#xff0c;正是我们透视收支明细、洞察支出开销规律的得力助手。 首先&#xff0c;第一步&#xff0c;我们要进入晨…

如何在本地电脑部署HadSky论坛并发布至公网可远程访问【内网穿透】

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 前言 经过多年的基础…