ES6第四章 字符串的扩展

一、字符串的Unicode表示法

表示方式:\uxxxx
范围:\u0000-\uFFFF
超出范围必须用双字节的方式来表示一个字符。
如:

"\uD842\uDFB7"
// "𠮷"

改进后的方法:用{}表示

"\u{20BB7}"
// "𠮷"
  • 六种表示字符的方法:
'\z' === 'z'  // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true

二、字符串的遍历器接口

使用for of 循环遍历

for (let codePoint of 'foo') {
  console.log(codePoint)
}

三、直接输入 U+2028 和 U+2029

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

			alert("\u005C"+" 123");
            alert("\u000D"+" 123");
            alert("\u2028"+" 123");
            alert("\u2029"+" 123");
            alert("\u000A"+" 123");

四、JSON.stringify() 的改造

JSON 数据必须是 UTF-8 编码。但是现在的JSON.string方法有可能返回不符合UTF-8标准的字符串。
0xD800 ~ 0xDFFF之间的码点不能单独使用,需要把两个码点放到一起来表示一个字符。当JSON.stringify遇到0xD800~0xDFFF之间的单个码点或不配对时,会返回转义字符。

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

五、模板字符串

  • 要输出(’)时,需用(\)转义
let greeting = `\`Yo\` World!`;
输出:
`Yo` World!
  • 在使用(`)包括多行字符串时,所有的空格和缩进都被保留在输出之中。
alert(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
/*.trim()*/`);
输出:
空行
<ul>
  <li>first</li>
  <li>second</li>
</ul>

要想删去空行,需要使用.trim()方法

  • 在字符串中嵌入变量,需加 ${}
var name = "lizhi";
alert(`my name is ${name}`);	//my name is lizhi
  • 模板字符串的${}内可放入Js表达式/函数(如fn())
  • 如果模板字符串中的变量没有声明,将会报错。如果模板字符串内部包含的是字符串,将原样输出。
如:
//place未定义,报错
msg = `hello , ${place}`;

六、标签模板

(标签:指函数,紧跟在后的是它的参数)
功能:紧跟在一个函数名后面,该函数被调用来处理这个模板字符串。

alert`123 4`;
等价于
alert("123 1");
等价于
alert(['123 1']);
  • 当有变量时,模板字符串会先处理不同字符串,在处理变量。
let a = 5; let b = 10;

tag`Hello ${a+b} world &{a*b}`
等价于
tag(["Hello ",' world ',''],15,50]);
此时tag接受三个参数,分别为数组,15,50
  • 标签模板还可用于过滤字符串,防止用户恶意输入,原理是把特殊字符用同义的字符串代替,
    &----&amp; < ----&lt;
  • 标签模板还可用于国际语言转换
    Welcome to ${siteName},you are visitor numer ${visitorNumber}
  • console.log接受的参数是一个数组,该数组有一个raw属性,保存着原字符串。
  • 模板字符串的限制
    已知模板字符串课嵌入其他语言,但遇到\u0FF,\u{42}等字符时JS会将其当做Unicode字符转义,在以前的ES版本中会进行报错。但在ES2018中放松了对字符串转义的限制,但遇到不合法的字符串转义会返回undefined,而不是报错。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值