ES6学习笔记3 字符串的扩展

ES6 学习笔记 ES6 引入了许多新特性,如let/const解构表达式箭头函数Promise等,极大地提升了 JavaScript 的开发效率和代码可读性。掌握这些新特性,能够帮助我们编写更加现代化和高效的 JavaScript 代码。 阅读详情

Unicode表示法

Javascript允许采用\uxxxx以十六进制码nnnn表示一个Unicode字符,但只能表示范围在\u0000 ~ \uFFFF之间的字符,超过这个范围的字符的范围,则必须使用双字节的形式表示

"\uD842\uDFB7"
// '吉'

在ES6中,只要将其放进大括号内,就可以用一个字节表示

"u\{20BB7}"
// '吉'

"\u{41}\u{42}\u{43}"
//'ABC'

codePointAt() 和 String.fromCodePoint()

在ES5中,字符使用UTF-16格式保存,也就是一个字符用固定2字节存储,charCodeAt()方法和String.fromCharCode()方法来分别获取一个字符的字符编码和将字符编码转换为字符,但它们不能识别使用4字节存储的字符,Javascript会将其识别为两个字符。
这里写图片描述
codePointAt()方法能够正确返回4个字节存储的字符,并返回其unicode码(默认为十进制,可以调用toString(16)方法返回16进制值)
这里写图片描述
上述代码将字符串视作3个字符,在第一个字符上,正确地识别了unicode码,但是字符“a”的位置序号却成了3,对于这个问题,可以使用for...of循环,它会正确识别32位的4字节UTF-16字符
这里写图片描述
相应的,String.fromCodePoint()方法能将超过0xFFFF的字符编码转换为字符
这里写图片描述


字符串的遍历

使用for...of可以正确识别遍历字符串

for (let s of "abc"){
    console.log(s);
}
//a
//b
//c

at()

ES5的charAt()方法,返回字符串给定位置的字符,但其同样不能识别unicode码超过0xFFFF的字符,at()方法弥补了这问题
这里写图片描述


normalize()

该方法将字符的不同表示方法统一为同样的形式,该方法可以接受一个参数,用于指定正规化的方法(NFC,NFD,NFKC,NFKD)

'\u01D1' === '\u004F\u030C'  //false
'\u01D1'.normalize() === '\u004F\u030C'.normalize()  //true

值得注意的是,该方法不能识别3个及以上字符的合成,且应与DOM的normalize()方法区别,后者在包含多个文本节点的父元素上调用,其会将空白文本节点移除,并合并相邻的文本节点。


includes(), startsWith(), endsWith()

ES5提供了indexOf方法来查找字符串的位置,ES6又提供了3种新方法:

  • includes():返回布尔值,表示是否找到了参数字符串
  • startsWith():返回布尔值,表示参数字符串是否在源字符串开头
  • endsWith():返回布尔值,表示参数字符串是否在源字符串结尾

它们都可接受第二个可选参数n,表示开始搜索的位置,其中endsWith()针对前n个字符,而其余两方法针对从第n个字符到字符串结束的字符

var s = 'hello world';

s.includes('o');    //true  
s.startsWith('he');   //true
s.endsWith('d');    //true

repeat()

返回一个新字符串,将原字符串重复多次

'x'.repeat(3)  //'xxx'
'a'.repeat(0)  //''

参数如果是小数会被取整,如果是小于-1的负数或是无限大,则会报错


padStart() 和 padEnd()

这两个方法用于字符串补全长度,padStart()用于头部补全,padEnd()用于尾部补全。他们都接受两个参数,补全后字符串的最小长度和用于补全的字符串,如果省略第二个参数,则会用空格来补全

'x'.padStart(4,'ab');   //'abax'
'x'.padEnd(4,'ab');   //'xaba'

如果原字符串的长度等于或大于指定的最小长度,则返回原字符串

'xxx'.padStart(2,'ab');   //'xxx'
'xxx'.padEnd(2,'ab');   //'xxx'

模板字符串

模板字符串是增强版的字符串,用反引号( ` )标识,可以用其定义多行字符串,或者在字符串中嵌入变量

//多行字符串
` In ES5 this is
not leagl `

在模板字符串中嵌入变量,需要将变量名写在${ }中

var x = 1;
var y = 2;
`${x} + ${y * 2} = ${x + y}`
//"1+4=3"
var obj = {x:!, y:2};
`${ obj.x + obj.y }`
//3

模板字符串中还能调用函数

function fn(){
    return "hello";
}

` zjw, ${fn()} !`
//"zjw, hello !"

标签模板

模板字符串可以紧跟在一个函数后面,这个函数用于处理这个模板字符串,这称为标签模板

alert`123`
//等同于 alert(123)

当模板字符串中有变量时,模板字符串会被分隔成几部分,并将分隔后的纯字符串数组和变量参数传递给函数

var a=5;
var b=10;
tag`hello ${a + b} world ${ a*b }`;
//等同于
tag(['hello ',' world '], 15, 50);

function tag(stringArr,value1,value2){
    //处理字符串
}

标签模板可以用于过滤HTML字符串,多语言转换等

var message = SaferHTML`<p>${user} has send you a message.</p>`

function SaferHTML(data){
    var s = data[0];
    for (var i = 1; i < arguments.length; i++){
        var arg = String(arguments[i]);  //将用户的输入转换为字符串

        s += arg.replace(/&/g, "&amp;")
                .replace(/</g, "&lt;")
                .replace(/>/g, "&gt;");   //转义字符并将其连接到纯字符串后面

        s += data[i];   //连接下一个纯字符串
    }
    return  s;
}

String.raw()

该方法往往充当模板字符串的处理函数,其会返回一个转义反斜线,并替换变量后的模板字符串。

String.raw`Hi \n ${2+3}`;
// "Hi \\n 5"

其也可以作为正常函数使用,其第一个参数是一个具有raw属性的对象,且属性值应该是一个数组

String.raw({raw:['a','b','c']},0,1);
//"a0b1c"
字符串与数值扩展【ES6】 字符串扩展:includes,(startsWith,endsWith),repeat 数值扩展: Number.isFinite,Number.isNaN,Number.isInteger,Number.EPSLON,Math.trunc,Math.sign 阅读详情

相关推荐

为什么PCB设计中的50Ω阻抗如此重要?从USB到以太网的实战解析

本文深入解析了PCB设计中50Ω特征阻抗的核心重要性及其工程权衡起源。文章从传输线理论出发,阐释了阻抗匹配对防止信号反射、确保信号完整性的关键作用,并对比了USB、以太网等不同应用场景的阻抗标准。同时,文章结合实际案例,剖析了在两层板等简单设计中实现精准阻抗控制的难点与实战解决方案。

weixin_29268385的博客 297

【manacher】【最长回文字符串】小y的镜像串

本篇文章不是详细讲解,如需详细讲解请跳转参考文章 Manacher问题 参考文章: https://oi-wiki.org/string/manacher/ https://blog.youkuaiyun.com/weixin_42373330/article/details/82118694 变量描述: p[i]p[i]p[i] 以i为中心的向右可以扩展的最长回文字符串的长度 mxmxmx:i之前的最长回文字符串到达右边的最远边界位置 ma[i]ma[i]ma[i]:对字符串处理后的字符串,字符串处理需要在相邻两个字

行码棋 796

cartographer错误终结者 ordered_multi_queue.cc:155 Queue waiting for data

错误描述 错误提示的感应器数据可能是: Queue waiting for data:(0, points2) Queue waiting for data:(0, odom) 说明在提供给cartographter的传感器数据出现了问题,没有被成功解析。 原因分析 小编是使用自己编写的odom话题发布时,cartographer爆出了该错误。 于是设想传感器数据相关的tf或lua配置或数据本身存在错误。 于是逐个排查,最终发现了错误原因。 排查可能原因:tf错误 小编之前已处理过tf与lua配置的问题 参

人工智能机器人 4157

C语言初阶3扩展:字符串

C语言初阶3扩展:字符串1. 字符串操作1.1 字符串遍历1.2 字符串赋值1.3 字符串输入输出2. 字符串与函数2.1 字符串传参2.2 字符串返回3. 练习3.1 交换3.2 拼接3.3 拷贝3.4 比较4. 字符串指针4.1 sizeof()与strlen()4.2 替换字符1. 修改字符数组2. 字符串指针3. 指向字符数组的字符串指针4.3 地址修改4.4 小结4.5 如何选择?5. 字符串const5.1 const字符数组5.2 指向const字符数组的字符串指针6. 字符串函数6.1 字符

k0512的博客 2279

【鸿蒙南向开发】OpenHarmony音频驱动audio适配方案

这份鸿蒙(HarmonyOS NEXT)文档包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

HarmonyOS_666的博客 4513

apt-get update时出现GPG error:... bionic InRelease:The following signatures were invalid: EXPKEYS解决方案

本文主要介绍了apt-get update时出现W: GPG error: … bionic InRelease: The following signatures were invalid: EXPKEYSIG B7B3B788A8D3785C MySQL Release Engineering E: The repository ‘… bionic InRelease’ is not signed.解决方案,希望能对使用Ubuntu系统的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

三、字符串的扩展

字符的 Unicode 表示法 ES6里,只要将码点放入大括号,就能正确解读该字符 "\u{20BB7}" // "????" "\u{41}\u{42}\u{43}" // "ABC" let hello = 123 hell\u{6F} // 123 codePointAt()

m0_38066007的博客 274

图解移动机器人中的运动规划(Motion Planning),附几十种规划算法

运动规划是移动机器人的核心理论和工程技术之一,本文作为教程先导,解析了运动规划的两大组件——路径规划和轨迹规划。欢迎感兴趣的同学订阅专栏!

FRIGIDWINTER的博客 4万+

linux中的特殊字符

特殊字符 符号 使用 ; 一般情况我们输出完一个命令需要按一个回车,如果你想在一行执行多个命令,中间可以用;号分割 cd /home ; ls 表示任意字符(正则) ? 任一个字符 [abc] 列表项之一 [^abc] 对于列表取非 也可以使用范围 [a-z] [0-9] A-Z {} 循环列表时用 touch_{1,2,3}时就会建立touch_1,touch_2,touch_3循环出这三个文...

zjw_shuaige的博客 901

Python爬虫教程:抓取地方政府网站的公开文件与政策信息

Web爬虫是指一种自动化脚本,用于模拟人类浏览器访问网页、提取网页内容的数据抓取工具。发送请求到目标网页;获取网页内容;解析网页内容,提取所需数据;将数据保存或进一步处理。爬虫可以抓取各种形式的数据,如文本、图片、文件等。本教程将重点展示如何抓取地方政府网站上公开的政策文件、公告等信息。许多政府网站都会采取一定的反爬虫措施,防止大量数据被爬取。IP封锁:如果短时间内大量请求来自同一IP,可能会被封锁。验证码:一些网站会使用验证码来验证访问者是否为机器人。动态加载。

2201_76125261的博客 1981

C++大牛的博客

1. C++大牛的博客     Bjarne Stroustrup的博客: Bjarne Stroustrup’s Homepage Bjarne Stroustrup,不认识的可以去面壁了,没有他,就没有我们现在的饭碗。Bjarne Stroustrup是丹麦人,目前任教于TAMU。他的Homepage和他的书籍The C++ Programming Language一样

程序猿老樊的博客 6244

3 字符串的扩展

字符Unicode的表示法 javascript允许采用 \uxxxx(Unicode码点) 形式表示一个字符。但是,这种表示法只限于码点在\u0000 ~ \uFFFF之间的字符,超出这个范围的字符,必须用两个双字节的形式表示。 "\u20BB7"---会理解为 "\u20BB+7" // " 7" ES6 对这一点做出了改进,只需要将...

weixin_33816611的博客 162

【全网首发】2026华为OD双机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

算法大师! 8786

ES6学习笔记3:字符串的扩展

目录 文章目录字符的 Unicode 表示法六种表示字符的方法字符串遍历器接口允许直接输入字符以及字符的转义形式JSON.stringify()的改造模版字符串定义模版编译标签模版标签模版的应用模版字符串的限制 字符的 Unicode 表示法 ES6 加强了对Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。 console.log('\u...

W先生 268

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《ES6标准入门(第3版)》学习笔记12:chapter_4 字符串的扩展(二)

让学习“上瘾”,成功更好的自己!!! 8 repeat() <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"&gt...

weixin_44582681的博客 204

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

es6 字符串的扩展

字符串的扩展传统的字符串拼接模板字符串标签模板ES6字符串String类扩展函数 传统的字符串拼接 var str1 = "小白"; var str2 = "hello"; var str3 = "world"; console.log(str1 + "说:" + str2 +","+ str3); //小白说:hello,world 普通字符串的拼接不包含空格和换行 var st...

Hassan的小博客! 899

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

(3)ES6 字符串的扩展

上面代码中,模板字符串原本是应该报错的,但是由于放松了对字符串转义的限制,所以不报错了,JavaScript 引擎将第一个字符设置为 undefined ,但是 raw 属性依然可以得到原始字符串,因此 tag 函数还是可以对原字符串进行处理。tag 函数的第一个参数是一个数组,该数组的成员是模板字符串中那些没有变量替换的部分,也就是说,变量替换只发生在数组的第一个成员与第二个成员之间、第二个成员与第三个成员之间,以此类推。上面代码中,所有模板字符串的空格和换行,都是被保留的,比如 标签前面会有一个换行。

java程序员的蜕变之路 1131

ES6之字符串的扩展

TOC/TOC。

BradenHan的专栏 968

ES6基础-ES6的扩展

进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字...

程序员哆啦A梦,蓝胖子 5069

全栈之路——前端(一):ES6之字符串、正则的扩展

ES6对字符串和正则表达式进行了多项增强。字符串方面,扩展了Unicode表示法,支持大括号码点;增加Iterator接口,使for...of能正确识别Unicode字符;允许直接输入U+2028和U+2029特殊字符;引入模板字符串支持嵌入变量和表达式。正则方面,新增u修饰符处理四字节字符,y修饰符实现粘连匹配,s修饰符(dotAll模式)让.匹配所有字符;提供flags属性获取修饰符;支持Unicode属性类和具名组匹配。这些改进使JS更好地处理Unicode字符和复杂正则匹配场景。

whu_three的博客 1026

es3中使用es6/7的字符串扩展

最近在看阮一峰的《ES6标准入门》,在字符串扩展一节中有提到几个新的扩展,觉得挺有意思,想在ES3里面使用,于是就有下面的兼容性写法。 repeat 将一个字符串重复n次 String.prototype.repeat||(String.prototype.repeat=function(number){ var r=[],i if(Object.prototype.t...

diraoyong6051的博客 126

ES6之对象的扩展

TOC?/TOC。

BradenHan的专栏 1308

ES6个人笔记记录——字符串扩展

关于ES6的一些学习笔记 // console.log("\u0061"); console.log("\uD842\uDF02"); let s1 = "好"; console.log("好",s1.length); let s = "????"; console.log(s,s.length,s.charAt(0),s.charAt(1),s.charCodeAt(0),s.charCodeAt(1...

whmJack的博客 7万+

ES6:字符串的扩展

函数的第一个参数是一个数组,该数组的成员是模板字符串中那些没有变量替换的部分,也就是说,变量替换只发生在数组的第一个成员与第二个成员之间、第二个成员与第三个成员之间,以此类推。上面代码中,模板字符串原本是应该报错的,但是由于放松了对字符串转义的限制,所以不报错了,JavaScript 引擎将第一个字符设置为。但是,如果模板字符里面有变量,就不是简单的调用了,而是会将模板字符串先处理成多个参数,再调用函数。注意,这种对字符串转义的放松,只在标签模板解析字符串时生效,不是标签模板的场合,依然会报错。

DZQ1223的博客 676

ES6_字符串的扩展

本文介绍ES6对字符串的改造和增强。

Joyce的博客 934

ES6前端学习笔记

标准委员会最终决定,标准在每年6月正式发布并作为当年的正式版本,接下来的时间里就在此版本的基础上进行改动,直到下一年6月草案就自然变成新一年的版本,这样一来就无需以前的版本号,只要用年份标记即可。:粘连修饰符,确保匹配必须从剩余的第一个位置开始全局匹配(与。定义:对一类具有共同特征的事物的抽象(构造函数语法糖)互不兼容,目前解决方案是将两者分开,采用各自的加载方案。,才用了一年,按照这样的定义下去,那不是很快就。(返回的正则表达式会忽略原正则表达式的修饰符),所有在类中定义的属性方法都会被实例继承。

实力派,无需多言! 1137
上一篇: ES6学习笔记2 变量的解构赋值
下一篇: 正则表达式
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值