es6字符串的拓展

字符串拓展

字符串的表示法

论表示一个字符我们可以使用的方法有什么?

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

上面描述的方法都是可以用表示字符的。

在ES6中加强了对Unicode的支持,允许采用\uxxxx形式表示一个字符,其中的xxxx表示字符的Unicode 码点。但是使用这种方式表示一个字符时,码点只限于在\u0000 ~\uFFFF之间。超出这个范围的字符必须用两个双字节的形式表示。

"\uD842\uDFB7"
// "?"

上面的那个字就是一个典型的双字节表示。除了这种方法可以表示码点超出\0xFFFF的字符,还可以直接将码点中的数值放进大括号里,如:

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

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

而且上面的例子表明,大括号表示法和四字节的UTF-16编码等价,所以我们一共有6种方法可以表示一个字符。

字符串的遍历器接口

ES6 为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历。

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

这个遍历器最大优点就是可以识别大于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);
}
// "?"

直接输入字符

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

'中'==='\u4e2d'  //true

但是,JavaScript 规定有5个字符,不能在字符串里面直接使用,只能使用转义形式。
U+005C:反斜杠(reverse solidus)
U+000D:回车(carriage return)
U+2028:行分隔符(line separator)
U+2029:段分隔符(paragraph separator)
U+000A:换行符(line feed)

在字符串中如果像使用反斜杠一定要转义写成\\或者使用'\u005c'

JSON.stringify()的改造

为了防止返回不符合UTF-8标准的编码,JSON.stringify()做了改造 ——如果遇到0xD8000xDFFF之间的单个码点,或者不存在的配对形式,它会返回转义字符串,留给应用自己决定下一步的处理。

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

模板字符串

传统的 JavaScript 语言,输出模板通常是这样写的(下面使用了 jQuery 的方法)。

$('#result').append(
  'There are <b>' + basket.count + '</b> ' +
  'items in your basket, ' +
  '<em>' + basket.onSale +
  '</em> are on sale!'
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值