ECMASCript6 第四章 字符串的扩展

【深入理解ECMAScript 6】 字符串扩展(字符串是否包含、重复字符串、模板字符串) ECMAScript6 字符串扩展 目录ECMAScript6 字符串扩展一、字符串判断是否包含ES5ES6includes()startsWith()endsWith()二、重复字符串repeat()三、模板字符串1、什么是模板字符串2、原始字符串3、页面模板分析图 一、字符串判断是否包含 ES5 /* ES5 提供的判断是否包含的方法 string.indexOf(searchStr)方法 作用:返回指定字符串包含的指定子字符串的索引值 结果: 包含:返回第一个匹配的索引 阅读详情

1.字符的 Unicode 表示法

单字节表示时:

允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。

这种表示法只限于码点在\u0000~\uFFFF之间的字符。

超出这个范围的字符,必须用两个双字节的形式表示。\uxxxx\uxxxx.


只要将码点放入大括号,就能正确解读该字符。

"\u{20BB7}"
// "?"

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

let hello = 123;
hell\u{6F} // 123

'\u{1F680}' === '\uD83D\uDE80'
// true

大括号表示法与四字节的 UTF-16 编码是等价的。

2.字符串的遍历器接口

for…of…可以识别大于0xFFFF的码点,传统的for循环无法识别这样的码点。

let text = String.fromCodePoint(0x20BB7);

for (let i = 0; i < text.length; i++) {
  console.log(text[i]);
}
// " "
// " "

for (let i of text) {
  console.log(i);
}
// "?"

上面代码中,字符串text只有一个字符,但是for循环会认为它包含两个字符(都不可打印),而for…of循环会正确识别出这一个字符。

3.直接输入 U+2028 和 U+2029

JavaScript字符串允许直接输入字符,以及输入字符的转义形式。

举例来说,“中”的 Unicode 码点是 U+4e2d,你可以直接在字符串里面输入这个汉字,也可以输入它的转义形式\u4e2d,两者是等价的。

但是,JavaScript规定有5个字符,不能在字符串里面直接使用,只能使用转义形式。

  • U+005C:反斜杠(reverse solidus)
  • U+000D:回车(carriage return)
  • U+2028:行分隔符(lineseparator)
  • U+2029:段分隔符(paragraph separator)
  • U+000A:换行符(line feed)

4.JSON.stringify()的改造

为了确保返回的是合法的 UTF-8 字符,ES2019改变了JSON.stringify()的行为。如果遇到0xD800到0xDFFF之间的单个码点,或者不存在的配对形式,它会返回转义字符串,留给应用自己决定下一步的处理。

JSON.stringify('\u{D834}') // ""\\uD834""
JSON.stringify('\uDF06\uD834') // ""\\udf06\\ud834""

5.模板字符串

模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

// 普通字符串
`In JavaScript '\n' is a line-feed.`

// 多行字符串
`In JavaScript this is
 not legal.`

console.log(`string text line 1
string text line 2`);

// 字符串中嵌入变量
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`

如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。

$('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`);

比如

  • 标签前面会有一个换行。如果你不想要这个换行,可以使用trim方法消除它。

$('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`.trim());

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

  • 大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。

let x = 1;
let y = 2;

`${x} + ${y} = ${x + y}`
// "1 + 2 = 3"

`${x} + ${y * 2} = ${x + y * 2}`
// "1 + 4 = 5"

let obj = {x: 1, y: 2};
`${obj.x + obj.y}`
// "3"

  • 模板字符串之中还能调用函数。
function fn() {
  return "Hello World";
}

`foo ${fn()} bar`
// foo Hello World bar

如果大括号中的值不是字符串,将按照一般的规则转为字符串。比如,大括号中是一个对象,将默认调用对象的toString方法。

  • 如果模板字符串中的变量没有声明,将报错。
// 变量place没有声明
let msg = `Hello, ${place}`;
// 报错

  • 大括号内部是一个字符串,将会原样输出。
`Hello ${'World'}`
// "Hello World"

6.模板编译

function compile(template){
  const evalExpr = /<%=(.+?)%>/g;
  const expr = /<%([\s\S]+?)%>/g;

  template = template
    .replace(evalExpr, '`); \n  echo( $1 ); \n  echo(`')
    .replace(expr, '`); \n $1 \n  echo(`');

  template = 'echo(`' + template + '`);';

  let script =
  `(function parse(data){
    let output = "";

    function echo(html){
      output += html;
    }

    ${ template }

    return output;
  })`;

  return script;
}

compile函数的用法如下。


let parse = eval(compile(template));
div.innerHTML = parse({ supplies: [ "broom", "mop", "cleaner" ] });
//   <ul>
//     <li>broom</li>
//     <li>mop</li>
//     <li>cleaner</li>
//   </ul>

7.标签模板

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

但是,如果模板字符里面有变量,就不是简单的调用了,而是会将模板字符串先处理成多个参数,再调用函数。

let a = 5;
let b = 10;

tag`Hello ${ a + b } world ${ a * b }`;
// 等同于
tag(['Hello ', ' world ', ''], 15, 50);

模板处理函数的第一个参数(模板字符串数组),还有一个raw属性。

console.log`123`
// ["123", raw: Array[1]]

上面代码中,console.log接受的参数,实际上是一个数组。该数组有一个raw属性,保存的是转义后的原字符串。

8.模板字符串的限制

如果遇到不合法的字符串转义,就返回undefined,而不是报错,并且从raw属性上面可以得到原始字符串。

function tag(strs) {
  strs[0] === undefined
  strs.raw[0] === "\\unicode and \\u{55}";
}
tag`\unicode and \u{55}`

上面代码中,模板字符串原本是应该报错的,但是由于放松了对字符串转义的限制,所以不报错了,JavaScript 引擎将第一个字符设置为undefined,但是raw属性依然可以得到原始字符串,因此tag函数还是可以对原字符串进行处理。

Web前端之 ECMAScript6 ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现,常场合,这两个词是可以互换的。Nodejs诞生于2009年,主攻服务器方向,使得利用JavaScript也可以完成服务器代码的编写。使用ES6,即JavaScript新特性,需要安装Nodejs环境。因为在有些浏览器上,对Es6的支持不是那么友好,因此,需要用Nodejs将ES6转换为ES5。 阅读详情

相关推荐

ECMAScript6新特性【字符串扩展、字符串新增方法、数值扩展、Math函数扩展】(三)-全面详解(学习总结---从入门到深化)

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

499

ECMAScript 6 入门学习(3.字符串的扩展)

本篇博客学习摘自阮一峰老师编写的《ECMAScript 6 入门》,记录下做笔记。 学习阶段,如果哪部分有问题,欢迎指正,共同探讨。@Apach3

Apach3的博客 503

【数据攻略】字节面试真题(含答案)+100道面试题库

数据攻略

qq_40002713的博客 4102

ES6标准入门 第四章:字符串的扩展

1、字符串的Unicode 表示法 JavaScript 允许采用 \uxxxx 表示一个字符,其中 xxxx 表示字符的码点。 "\u0061" // "a" ES5中的缺陷: 以上表示法只限于 \u0000——\uFFFF 之间的字符。超出这个范围的=字符,必须用两个双字节表示。 "\uD842\uDFB7" //"

weixin_30617561的博客 147

Aruba CX交换机VSX配置实战:如何避免脑裂导致的网络中断(含详细命令)

本文提供Aruba CX交换机VSX配置的实战指南,重点讲解如何通过构建高可靠的ISL链路聚合与独立隔离的Keepalive链路,有效避免网络脑裂风险。文章包含详细的命令步骤,从基础配置到高级故障排查,帮助网络工程师构建坚如磐石的高可用核心网络,确保业务流量零中断。

weixin_29231725的博客 172

基于ESP32-C3的便携式血氧仪硬件与算法实现

血氧饱和度(SpO₂)监测是生理参数无创检测的核心技术之一,其原理基于光电容积脉搏波(PPG)信号中红光与红外光吸收比值的动态变化。该技术依赖高精度模拟前端、稳定光学激励及实时数字信号处理能力,在消费级健康设备中面临功耗、体积与测量鲁棒性的多重约束。ESP32-C3凭借集成LEDC、12位ADC与低功耗双核架构,成为PPG终端的理想主控平台;结合定制化指夹式光学探头与比率法血氧算法,可实现非诊断级但趋势可靠的日常健康监测。本文围绕硬件电路设计、电源管理策略与嵌入式信号处理流程展开,覆盖从LED驱动、跨阻放大

weixin_29025501的博客 132

爬虫「Python」:解决网络爬虫返回文本中中文显示“\uxxxx”的问题

我们在网络爬虫时常常遇到好不容易爬到了想要的内容,结果文本中中文显示“\uxxxx”的问题,这里展示我遇到的情况...

qq_41297934的博客 3726

自由曲面与衍射光学元件DOE:从基础理论到工业应用的全景解析

本文全景解析了自由曲面与衍射光学元件的核心理论与工业应用。文章深入探讨了自由曲面在非对称光学设计中的灵活性及其数学描述与制造挑战,并阐述了衍射光学元件通过微纳结构进行波前相位调制的原理与多样化功能。两者与经典光学互补融合,共同构成了高端成像、智能照明、激光加工及AR/VR等前沿领域的底层技术支柱。

devops8pract的博客 391

ECMAScript 6之字符串的扩展

ECMAScript 6之字符串的扩展 ECMAScript 6对字符串进行了许多增强与改造,下面会逐个介绍。 1. 字符的 Unicode 表示法 ES6 加强了对 Unicode 的支持,允许采用\uxxxx形式表示一个码点在\u0000~\uFFFF之间的字符,其中xxxx表示字符的 Unicode 码点。 '\u0061'; // 'a' '\u0062'; // 'b' 对于Unico...

基地的博客 496

SMPTE ST 2110 概论(一)

SMPTE ST 2110 概论(一)前言ST 2110与ST 2022-6ST 2110-10:基本结构与时序ST 2110-20:未压缩的视频流后续 前言 这是一份我在实习期间制作的,关于SMPTE ST 2110的简单介绍。 这篇文章主要以梳理总结 SMPTE ST 2110 的概念为主,关于具体的内容,比如IP数据报的格式、RTP时间戳的具体代码内容等等,大家可以查阅 SMPTE ST 2...

Cidd0422的博客 2万+

VBA中如何使用Edge内核Browser?

在微软宣布停止对IE的支持后,许多使用VBA中Web Browser的用户遇到了困境,因为Web Browser使用的IE内核。然而微软并没有给出支持Edge的新版Web Browser,网上许多第三方的库也不够完善。经过调研,libEdge可以较好的和VBA集成,实现在Excel中打开Browser,甚至能够通过执行js代码,获取web页面的信息。项目需要WebView2Loader.dll和LibEdge.dll两个库,区分x86和x64版本。

金木AI 2398

第二章 ECMAScript6 扩展

另外,Set 对象还提供了几个用于遍历的方法:keys()、values() 和 entries()(对于 Set 来说,这三个方法返回的都是相同的迭代器对象,因为 Set 没有键和值的区别,每个元素既是键也是值)。在JavaScript ES6及之后的版本中,对象的扩展引入了一些新的语法和特性,使得对象字面量的创建、属性的定义、复制和合并等操作变得更加简洁和强大。ES6 引入了 Map 对象,它是一种键值对的集合,类似于对象,但 “键” 的范围不限于字符串,任何类型的值(对象或原始值)都可以作为键。

上官花雨滴博客!!! 1385

利用Arcgis提取nc数据并计算区域年均温

1.下载数据。2.解压数据至不含中文的路径中。打开工具箱中的多维分析工具-创建NetCDF栅格图层,导入数据。3.打开工具箱中的数据管理工具-图层和表视图-创建栅格图层,导入数据,对输出数据进行命名,得到月均温栅格数据。4.选择工具箱-Spatial Analyst工具(空间分析工具)-地图代数-栅格计算器,计算全国一年年均温。​5.将其导出为.tif格式数据,方便后期使用。6.选择工具箱-Spatial Analyst工具(空间分析工具)-区域分析--以表格显示分区统计,得到分区域的气温数据。

什么都学亿点点的博客 7992

ECMAScript-es6字符串的扩展

一、ECMAScript-es6字符串的扩展 1. 字符串Unicode表示法 // es6 \uxxxx \u:表示Unicode字符,xxxx表示码点范围:0000~ffff // 比如:\u20BB7 -> \u20BB+7 是超出范围的 // es6中表示法:\u{20BB7} // 表示一个字符'z' // 1. 就是一个'z' // 2. '\z' // 3. 八进制:\HHH // 4. 十六进制:\xHH // 5. es:\u007A // 6. es:\u{7A} 2. 字符

东东爱编码博客 198

政务帮办新范式:基于检索增强与多智能体协同的智能系统实践

本文提出了一种多智能体协同的智能政务系统架构,突破传统方案在状态管理、职责过载和感知闭环方面的局限。系统由中央规划智能体、对话引导智能体、参数提取智能体和执行状态分析智能体组成,通过职责分离与显式状态管理实现高效协同。核心创新在于中央决策引擎的确定性逻辑,采用基于规则的状态机设计,确保系统可靠可控。该架构支持自然语言交互、参数自动提取、业务系统操作和视觉闭环验证,能够真正实现"帮办"功能,显著提升政务服务的智能化水平。

469

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ECMAScript6语法

简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目 标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 https://es6.ruanyifeng.com/#README ECMAScript 和 JavaScript 的关系 一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? 要讲清楚这个问题,需要回顾历史。 1996 年 11 月,Jav

kylin's study 8134

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Ecmascript 6解构赋值及扩展

Ecmascript 6 ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。 Ecmascript 是 JavaScript 语言的标注规范 JavaScript 是 Ecmascript 规范的具体实现 具体实现取决于各...

chunejin7423的博客 194

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

《ECMAScript6入门》-字符串的扩展

1.字符串的扩展 ES6 只要将码点放入大括号,就能正确解读该字符。 "\u{20BB7}" // "????" "\u{41}\u{42}\u{43}" // "ABC" let hello = 123; hell\u{6F} // 123 '\u{1F680}' === '\uD83D\uDE80' // true 2.字符串的遍历器接口 ES6 为字符串添加了遍历器接口,使得字符串可以被for…of循环遍历。 除了遍历字符串,这个遍历器最大的优点是可以识别大于0xFFFF的码点,传统的for循

如果我年少有为不自卑 281

ECMAScript6简介——字符串的扩展

文章目录字符串的扩展字符串的遍历器接口 字符串的扩展 ES6加强了对Unicode的支持,并且扩展了字符串的对象。 字符串的Unicode表示法 JS允许采用\uxxxx形式表示一个字符串,其中xxxx表示字符串Unicode码点。 "\u0061" //"a" 但是这种形式只限于码点在\u0000~\UFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。 "\uD842\uDFB7" // "????" "\u20BB7" // " 7" 上面的代码表示,如果直接在\u

qiuqiudongdong的博客 226

ECMAScript 6 入门——字符串的扩展

三、字符串的扩展 1. 字符的Unicode表示法 ES6加强了对Unicode的支持: (1)运行 \uxxxx表示一个字符,其中xxxx表示字符的Unicode码点 (2)ES6改进。将码点放入大括号即能正确读取该字符 "\uD842\uDFB7" // "????" 由于超过0xFFFF的数值会被理解成\u20BB+7,又\u20BB为不可打印字符,所有显示一个空格加7 "\u20BB7" // ...

xiedongze__的博客 453

ECMAScript 6入门学习(一)

ECMAScript 6简介 let 命令 const 命令 变量和解构赋值 字符串的扩展 字符串的新增方法 正则的扩展 数值的扩展

Lielying的博客 671

ECMAScript6特性

Es6变量、面向对象、prototype、继承、arrow functions、template string、destructuring、arguments

六月长安的博客 2687

ECMAScript6

var可以在全局范围或者函数范围内声明变量// 变量与常量// 在整个window中//只能在函数内访问//全局变量会自动绑定到window对象上var 变量可以重新声明和修改//修改//重新声明,不会报错;如果在java中,就报错了var 的变量提升:在执行代码前,变量或函数的声明会移至到作用域的顶端。

m0_66572887的博客 988

ECMASCRIPT 6 实战之 模板字符串

模板字符串(templating string)在 ECMASCRIPT 6中是最为实用的技术之一,它的出现,巧妙地解决了我们对字符串处理的很多需求, 有了模板字符串, 对于字符串的处理会显得更加优雅从容. 字符串拼接 在模板字符串内做拼接操作, 更加符合直觉感受 const getFormateDate = (seperate = '-') => { let date = ne...

weixin_34262482的博客 335

ECMAScript6详解

ECMAScript 也是一门脚本语言,缩写为ES,通常看做JavaScript的标准化规范ECMAScript6.0是JavaScript语言的下一代标准,它的目标是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

互联网底层民工的博客 1356

《Understanding ECMAScript 6》——Introduction

《理解 ECMAScript 6》——简介JavaScript的核心语言特性是在一个叫做ECMA-262的标准中定义的。在这个标准中定义的语言叫做ECMAScript。你所知道的在浏览器中和Node.js中的JavaScript其实是ECMAScript的父集。浏览器和Node.js通过增加对象和方法来增加更多的功能,不过语言的核心还是在ECMAScript中定义的。ECMA-262标准的不断发展对

Ontides的博客 1207
上一篇: egg中间件middleware学习笔记
下一篇: ECMAScript6第五章字符串处理方法扩展学习笔记
跟着大佬学习
博客等级 码龄8年 2粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值