需求:
const str = 'Hello🌞,你好';
要求通过截取得到“Hello🌞”
传统方法及问题:
提到截取,通常会想到用slice
str.slice(0,6)
使用slice后,得到的是“Hello�”,并未得到预期的结果。原因是Unicode字符占用2个字符长度。
JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode 码点大于0xFFFF的字符),JavaScript 会认为它们是两个字符。
解决办法:
使用Array.from,将字符串转为数组后再做截取,并拼接成目标结果。
const resStr = Array.from(str).slice(0, 6).join('');
console.log(resStr); // 可得到“Hello🌞”