JavaScript 共有 6 种方法可以表示一个字符
‘\z‘ === ‘z‘ // true ‘\172‘ === ‘z‘ // true ‘\x7A‘ === ‘z‘ // true ‘\u007A‘ === ‘z‘ // true ‘\u{7A}‘ === ‘z‘ // true
for (let codePoint of ‘foo‘) { console.log(codePoint) } // "f" // "o" // "o"
可以识别大于0xFFFF
的码点
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 规定有5个字符,不能在字符串里面直接使用,只能使用转义形式。
举例来说,字符串里面不能直接包含反斜杠,一定要转义写成\\
或者\u005c
。
JSON.stringify() 的改造
根据标准,JSON 数据必须是 UTF-8 编码。但是,现在的JSON.stringify()
方法有可能返回不符合 UTF-8 标准的字符串。
具体来说,UTF-8 标准规定,0xD800
到0xDFFF
之间的码点,不能单独使用,必须配对使用。比如,\uD834\uDF06
是两个码点,但是必须放在一起配对使用,代表字符??
。这是为了表示码点大于0xFFFF
的字符的一种变通方法。单独使用\uD834
和\uDFO6
这两个码点是不合法的,或者颠倒顺序也不行,因为\uDF06\uD834
并没有对应的字符。
JSON.stringify()
的问题在于,它可能返回0xD800
到0xDFFF
之间的单个码点。为了确保返回的是合法的 UTF-8 字符,ES2019 改变了JSON.stringify()
的行为。如果遇到0xD800
到0xDFFF
之间的单个码点,或者不存在的配对形式,它会返回转义字符串,留给应用自己决定下一步的处理。
传统的 JavaScript 语言,输出模板通常是这样写的(下面使用了 jQuery 的方法)。
$(‘#result‘).append( ‘There are <b>‘ + basket.count + ‘</b> ‘ + ‘items in your basket, ‘ + ‘<em>‘ + basket.onSale + ‘</em> are on sale!‘ );
上面这种写法相当繁琐不方便,ES6 引入了模板字符串解决这个问题。
$(‘#result‘).append(` There are <b>${basket.count}</b> items in your basket, <em>${basket.onSale}</em> are on sale! `);
模板字符串(template string)是增强版的字符串,用反引号(`)标识。
原文:https://www.cnblogs.com/lhqdbk/p/11528721.html