还是社会实践 发表于 2023-2-14 17:21:52

字符串的解读和标签模板

字符串解读

es6加强了对Unicode 的支持,允许\uxxxx的形式展现一个字符,例如:
console.log('\u0061'); // 打印 a\u后面的为字符的 Unicode 码点   \u 后面4位 xxxx
但是这种写法只识别 \u0000 到 \UFFFF 之间的字符,超出需要使用两个双字节表示,例如:
console.log('\uD842\uDFB7'); // 打印 吉如果说超出了\uxxxx字节的范围,则为两个字节的拼接,例如:
console.log('\u20BB7'); // 输出 ' 7'   \u20BB系统识别为空
console.log('\u00617'); // 输出 'a7'   \u0061识别为a,由于7超出了这个字节,所以为\u0061+7,结果为a7


es6对 Unicode 的支持进行了加强,如果超出了两个字节,放入大括号内即可正常解读
console.log("\u{20BB7}"); // 打印 吉

// 只要将码点放入大括号即可正确解读
console.log('\u{41}\u{42}\u{43}'); // 输出ABC大括号与双字节的写法是等价的
console.log('\u{1F680}' == '\uD83D\uDE80'); // 大括号与4字节的写法等价 输出truejs对字符的几种表现方法:
console.log('\z' === 'z');
console.log('\172' === 'z');
console.log('\x7A' === 'z');
console.log('\u007A' === 'z');
console.log('\u{7A}' === 'z');
console.log('z' === 'z');字符串的遍历

字符串遍历for...of
for (let codePoint of 'foo') {
   console.log(codePoint); // f o o
   }其实一般的遍历,例如for,也可以遍历字符串,但是for无法识别大于0xFFFF的码点,而for...of则可以识别
let text = String.fromCodePoint(0x20BB7)

// for循环
    for (let i = 0; i < text.length; i++) {
         console.log(text); // ' ' 空
      }
      
// for---of可以识别 大于0xFFFF的码点 , 而传统的for无法识别
    for (let i of text) {
      console.log(i); // 吉
   }
有些时候,我们在用JSON.stringify转字符串的时候,发现转译的字符串多了几个\
根据标准,JSON数据必须是 UTF-8 编码。但是JSON.stringify()方法有可能返回不符合 UTF-8 标准的字符串。
UTF-8 标准规定,0xD800到0xDFFF之间的码点,不能单独使用,必须配对使用。比如,\uD834\uDF06是两个码点,但是必须放在一起配对使用,代表字符
来源:https://www.cnblogs.com/wang-fan-w/p/17119878.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 字符串的解读和标签模板