这个问题不是 JavaScript 特有,只是记录一下。
其实就是 String 的长度的问题。String.length 得到的不是字符数
let str = '哈哈🎋🧨😘';
console.log(str.length) //8
emoji 占了 2 个长度,这个问题在 js 、java 、go 上有,其他语言还没有测试。
同样的,一些内置函数也受到了这个问题的影响。
let str = '哈哈🎋🧨😘';
console.log(str.substring(0, 2)); //哈哈
console.log(str.substring(0, 3)); //哈哈� //意料之外的结果
console.log(str.substring(0, 4)); //哈哈🎋
还有 String.charAt()等等
对于 js 解决办法就是把字符串转换成数组
let str = '哈哈🎋🧨😘';
console.log([...str].length) //5
日常开发中可能大家都依赖 String.length ,但是在某些情况下可能会出 BUG ,比如要遍历字符串的时候,当然如果你确保输入的字符串不会有那些特殊字符那就没问题了。
记录一下我遇到的 bug ,还有处理方法。总的来说就是变成数组
let bug = '哈哈🎋🧨😘';
console.log(bug.length) //8
console.log([...bug].length) //5
console.log(bug.split("").reverse().join("")) //�🗨🮋�哈哈
console.log([...bug].reverse().join("")) //😘🧨🎋哈哈
console.log(bug.substring(0, 3)); //哈哈�
console.log([...bug].slice(0, 3).join("")); //哈哈🎋
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.