使用模板字符串生成Emoji报错,如何实现该需求?
动态生成Emoji的正确姿势(解决模板字符串转义报错问题)
我之前也踩过这个坑!你遇到的问题本质是:JavaScript模板字符串里的Unicode转义序列(\u{...})是静态解析的,它必须在代码编译阶段就确定具体的字符码,没办法用变量插值来动态替换——这就是为啥直接写'\u{1F60E}'没问题,但用\u{${unifiedValue}}会抛出SyntaxError。
给你两个简单靠谱的解决方案,完全能替代大量if判断的写法:
方法1:使用String.fromCodePoint() + parseInt()
这个方法是最直观的,把十六进制的字符码字符串转成十进制数值后,传给fromCodePoint就能生成对应的Emoji:
const unifiedValue = '1F60E'; const emoji = String.fromCodePoint(parseInt(unifiedValue, 16)); console.log(emoji); // 输出 😎
parseInt(unifiedValue, 16):把十六进制字符串'1F60E'转换成十进制的128526String.fromCodePoint():接收Unicode码点数值,返回对应的字符
方法2:用Number()构造十六进制数值
如果觉得parseInt有点麻烦,也可以直接构造十六进制字面量字符串,再转成数值传给fromCodePoint:
const unifiedValue = '1F60E'; const emoji = String.fromCodePoint(Number(`0x${unifiedValue}`)); console.log(emoji); // 同样输出 😎
0x${unifiedValue}会生成字符串'0x1F60E',这是十六进制数值的字面量格式Number()把这个字符串转换成对应的数值,效果和0x1F60E一样
这两种方法都能完美支持动态生成Emoji,不管你有多少个字符码需要处理,只要循环遍历变量就行,再也不用写几百个if判断啦!
内容的提问来源于stack exchange,提问作者sertsedat
相关产品推荐
相关产品推荐

