iis服务器助手广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >ES6中字符串怎么用
  • 394
分享到

ES6中字符串怎么用

2024-04-02 19:04:59 394人浏览 八月长安
摘要

这篇文章主要介绍了es6中字符串怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。字符的Unicode表示法javascript允许采用\

这篇文章主要介绍了es6字符串怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

字符的Unicode表示法

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

"\u0061"
// "a"

但是,这种表示法只限于\u0000——\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表达。

"\uD842\uDFB7"
// "?"
"\u20BB7"
// " 7"

上面代码表示,如果直接在\u后面跟上超过0xFFFF的数值(比如\u20BB7),JavaScript会理解成\u20BB+7。由于\u20BB是一个不可打印字符,所以只会显示一个空格,后面跟着一个7。

ES6 对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符。

下面代码中,最后一个例子表明,大括号表示法与四字节的UTF-16编码是等价的。

"\u{20BB7}"
// "?"
"\u{41}\u{42}\u{43}"
// "ABC"
let hello = 123;
hell\u{6F} // 123
'\u{1F680}' === '\uD83D\uDE80'
// true

有了上述表示法之后,JavaScript共有6种方法可以表示一个字符。

'\z' === 'z' // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true

codePointAt()

ES6提供了codePointAt方法,能够正确处理4个字节储存的字符,返回一个字符的码点。

var s = '?a';
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.codePointAt(2) // 97

codePointAt方法的参数,是字符在字符串中的位置(从0开始)。上面代码中,JavaScript将“?a”视为三个字符,codePointAt方法在第一个字符上,正确地识别了“?”,返回了它的十进制码点134071(即十六进制的20BB7)。在第二个字符(即“?”的后两个字节)和第三个字符“a”上,codePointAt方法的结果与charCodeAt方法相同。

codePointAt方法返回的是码点的十进制值,如果想要十六进制的值,可以使用toString方法转换一下。

var s = '?a';
s.codePointAt(0).toString(16) // "20bb7"
s.codePointAt(2).toString(16) // "61"

实际上codePointAt方法的参数,仍然是不正确的。上面代码中,字符a在字符串s的正确位置序号应该是1,但是必须向codePointAt方法传入2。解决这个问题的一个办法是使用for...of循环,因为它会正确识别32位的UTF-16字符。

var s = '?a';
for (let ch of s) {
 console.log(ch.codePointAt(0).toString(16));
}
// 20bb7
// 61

String.fromCodePoint()

ES5提供String.fromCharCode方法,用于从码点返回对应字符,但是这个方法不能识别32位的UTF-16字符(Unicode编号大于0xFFFF)。

下面代码中,String.fromCharCode不能识别大于0xFFFF的码点,所以0x20BB7就发生了溢出,最高位2被舍弃了,最后返回码点U+0BB7对应的字符,而不是码点U+20BB7对应的字符。

String.fromCharCode(0x20BB7)
// "ஷ"

ES6提供了String.fromCodePoint方法,可以识别0xFFFF的字符,弥补了String.fromCharCode方法的不足。在作用上,正好与codePointAt方法相反。

String.fromCodePoint(0x20BB7)
// "?"
String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'
// true

上面代码中,如果String.fromCodePoint方法有多个参数,则它们会被合并成一个字符串返回。

注意,fromCodePoint方法定义在String对象上,而codePointAt方法定义在字符串的实例对象上。

字符串的遍历器接口

ES6为字符串添加了遍历器接口(详见《Iterator》一章),使得字符串可以被for...of循环遍历。

for (let codePoint of 'foo') {
 console.log(codePoint)
}
// "f"
// "o"
// "o"

at()

目前,ES6有一个提案,提出字符串实例的at方法,可以识别Unicode编号大于0xFFFF的字符,返回正确的字符。

'abc'.at(0) // "a"
'?'.at(0) // "?"

normalize()

许多欧洲语言有语调符号和重音符号。为了表示它们,Unicode提供了两种方法。一种是直接提供带重音符号的字符,比如Ǒ(\u01D1)。另一种是提供合成符号(combining character),即原字符与重音符号的合成,两个字符合成一个字符,比如O(\u004F)和ˇ(\u030C)合成Ǒ(\u004F\u030C)。
这两种表示方法,在视觉和语义上都等价,但是JavaScript不能识别。

'\u01D1'==='\u004F\u030C' //false
'\u01D1'.length // 1
'\u004F\u030C'.length // 2

上面代码表示,JavaScript将合成字符视为两个字符,导致两种表示方法不相等。

ES6提供字符串实例的nORMalize()方法,用来将字符的不同表示方法统一为同样的形式,这称为Unicode正规化。

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

normalize方法可以接受一个参数来指定normalize的方式,参数的四个可选值如下。

  • NFC,默认参数,表示“标准等价合成”(Normalization Form Canonical Composition),返回多个简单字符的合成字符。所谓“标准等价”指的是视觉和语义上的等价。

  • NFD,表示“标准等价分解”(Normalization Form Canonical Decomposition),即在标准等价的前提下,返回合成字符分解的多个简单字符。

  • NFKC,表示“兼容等价合成”(Normalization Form Compatibility Composition),返回合成字符。所谓“兼容等价”指的是语义上存在等价,但视觉上不等价,比如“囍”和“喜喜”。(这只是用来举例,normalize方法不能识别中文。)

  • NFKD,表示“兼容等价分解”(Normalization Form Compatibility Decomposition),即在兼容等价的前提下,返回合成字符分解的多个简单字符。

下面代码表示,NFC参数返回字符的合成形式,NFD参数返回字符的分解形式。
不过,normalize方法目前不能识别三个或三个以上字符的合成。这种情况下,还是只能使用正则表达式,通过Unicode编号区间判断。

'\u004F\u030C'.normalize('NFC').length // 1
'\u004F\u030C'.normalize('NFD').length // 2

includes(), startsWith(), endsWith()

传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。

  1. includes():返回布尔值,表示是否找到了参数字符串。

  2. startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。

  3. endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。

var s = 'Hello world!';
s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

这三个方法都支持第二个参数,表示开始搜索的位置。

下面代码表示,使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。

var s = 'Hello world!';
s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false

repeat()

repeat方法返回一个新字符串,表示将原字符串重复n次。

参数如果是小数,会被取整。

如果repeat的参数是负数或者Infinity,会报错。

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""
'na'.repeat(2.9) // "nana"
'na'.repeat(Infinity)
// RangeError
'na'.repeat(-1)
// RangeError

padStart(),padEnd()

ES7推出了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart用于头部补全,padEnd用于尾部补全。

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'

上面代码中,padStart和padEnd一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。

模板字符串

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

$('#result').append(`
 There are <b>${basket.count}</b> items
 in your basket, <em>${basket.onSale}</em>
 are on sale!
`);

感谢你能够认真阅读完这篇文章,希望小编分享的“ES6中字符串怎么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网JavaScript频道,更多相关知识等着你来学习!

--结束END--

本文标题: ES6中字符串怎么用

本文链接: https://www.lsjlt.com/news/68276.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ES6中字符串怎么用
    这篇文章主要介绍了ES6中字符串怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。字符的Unicode表示法JavaScript允许采用\...
    99+
    2024-04-02
  • ES6字符串怎么用
    这篇文章主要为大家展示了“ES6字符串怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ES6字符串怎么用”这篇文章吧。ES6 就是ECMAScript 6是新版本JavaScript语言的标...
    99+
    2023-06-27
  • 怎么使用ES6字符串
    本篇内容介绍了“怎么使用ES6字符串”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!字符串重复repeat(...
    99+
    2024-04-02
  • es6怎么判断字符串中是否有某个字符串
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。es6判断字符串是否包含子字符串的方法方法1:利用includes()函数ES6的字符串新增了includes方法,我们可以用它来判断是否包含子字符串。s...
    99+
    2023-05-14
    ES6 es6字符串
  • es6怎么实现字符串反转
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。反转字符串 是技术面试中最常问到的 JavaScript 问题之一。 面试官可能会要求你使用不同的编码方式来反转字符串,或者他们可能会要求你不使用内置方法...
    99+
    2022-11-22
    javascript es6字符串 ES6
  • ES6中模板字符串用法示例
    这篇文章给大家分享的是有关ES6中模板字符串用法示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。模板字符串 ``内容中可以直接出现换行符,单引号双引号内容不能直接用换行符(需要...
    99+
    2024-04-02
  • es6如何判断字符串中是否有某个字符串
    这篇文章主要介绍了es6如何判断字符串中是否有某个字符串的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇es6如何判断字符串中是否有某个字符串文章都会有所收获,下面我们一起来看看吧。判断方法:1、利用includ...
    99+
    2023-07-05
  • es6怎么将字符串转为大写
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。方法1、使用toUpperCase()函数将字符串转换为大写toUpperCase() 方法的作用:把指定字符串中的小写字母全部转换为大写字母,最后返回一...
    99+
    2023-05-14
    javascript ES6
  • ES6新特性之模板字符串怎么用
    这篇文章主要介绍了ES6新特性之模板字符串怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:ES6引入了一种新型的字符串字面量语...
    99+
    2024-04-02
  • es6怎么去除字符串前后空格
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。es6去除字符串前后空格的方法1、使用trim()--去除字符串头尾的空格符trim() 方法用于删除字符串的头尾空白符,空白符包括:...
    99+
    2023-05-14
    es6字符串 ES6
  • Python中字符串怎么用
    这篇文章主要介绍Python中字符串怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用单引号(')你可以用单引号指示字符串,就如同'Quote me on this'这样。所有的空白,即...
    99+
    2023-06-17
  • C#中字符串怎么用
    小编给大家分享一下C#中字符串怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!C#字符串分割string url = "...
    99+
    2023-06-18
  • 如何将es6字符串转为数字
    这期内容当中小编将会给大家带来有关如何将es6字符串转为数字,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。转换方法:1、使用parseInt...
    99+
    2024-04-02
  • es6怎么切割字符串并转换类型
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。在es6中,可以利用split()函数来切割字符串,将其转换为数组类型。split()函数介绍split()方法用于将给定字符串拆分为字符串数组;该方法是...
    99+
    2023-05-14
    javascript es6字符串 ES6
  • ES6之模版字符串如何使用
    本篇内容主要讲解“ES6之模版字符串如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ES6之模版字符串如何使用”吧!1.之前我们也可以使用JavaScri...
    99+
    2024-04-02
  • es6如何将数字转为字符串
    这篇“es6如何将数字转为字符串”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6如何将...
    99+
    2024-04-02
  • ES6中模板字符串的示例分析
    这篇文章主要为大家展示了“ES6中模板字符串的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ES6中模板字符串的示例分析”这篇文章吧。模板字符串(tem...
    99+
    2024-04-02
  • es6字符串如何去掉最后一个字符
    这篇文章主要介绍了es6字符串如何去掉最后一个字符的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇es6字符串如何去掉最后一个字符文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • es6解构支不支持字符串
    今天小编给大家分享一下es6解构支不支持字符串的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。es6解构支持字符串。ES6允许...
    99+
    2023-07-04
  • es6如何实现字符串反转
    本篇内容介绍了“es6如何实现字符串反转”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现方法:1、用split、reverse和join函...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作