js——emoji特殊的绘文字

45 阅读1分钟

str.charAt()——> 返回指定位置的字符串

str.charCodeAt()——> 获取指定位置字符的ASCII编码,仅返回utf-16的编码单元(码元,2个字节)

String.fromCharCode()——> 将指定的ASCII编码值转为对应字符(码元,2个字节)

str.codePointAt()——> 获取指定位置字符的Unicode码点值,支持对utf-16,如四字节的处理(码点,1个字节)

String.fromCodePoint()——> 将指定的Unicode码点值转为对应字符(码点,1个字节)

码元长度:字符串.length 码点长度:字符串可以向右的偏移量

中文如何表示 [\u4e00-\u9fa5] /\p{Unified_Ideograph}/u

/[\u4e00-\u9fa5]/.test("你")
/\p{Unified_Ideograph}/u.test("你")

of/in的区别 of/in有很多区别,这里强调es6后的语法,很多字符的遍历,使用码点,非码元

for(let i in "😂") {
    console.log(i)//码元,两个字节,以字节的length
}
for(let i in "😍") {
    console.log(i)//码点
}

Emoji emoji是特殊的绘文字,通常由两个字节组成,但本身包含合成行为 emoji的存储需要一定的编码支持,如果设置的不正确,数据库会炸;emoji的长度不属于码点,他是合成的 一般使用对应的utils库即可【根据合成特性反推】 皮肤控制

let colors = ['\udffb','\udffc','\udffd','\udffe','\udfff']
colors.map(item=>`\u{1f468}\ud83c${item}`)
//['👨🏻', '👨🏼', '👨🏽', '👨🏾', '👨🏿']

emoji合并

["👩","👨","🧑","👧","👦","🧒","👶"].join('\u200d')
//'👩‍👨‍🧑‍👧‍👦‍🧒‍👶'

键帽

[0,1,'#','*'].map(num => num + '\ufe0f\u20e3')//{}
//['0️⃣', '1️⃣', '#️⃣', '*️⃣']