为什么是"❌[0] === ",而是"✔️[0] !== "❌ ✔️?


'❌'[0] === '❌' // true
'✔️'[0] === '✔️' // false
'✔️'[0] === '✔'  // true

我怀疑它与unicode有关,但我想准确地理解发生了什么,以及如何正确地比较这些字符。为什么"✔️"one_answers"❌"区别对待?

我在这个简单的字符计数

中遇到了它
'✔️❌✔️❌'.split('').filter(e => e === '❌').length // 2
'✔️❌✔️❌'.split('').filter(e => e === '✔️').length // 0

因为✔️有两个字符:"✔️".length === 2

我认为"✔️"[0] === "✔""✔️"[1]表示颜色。

"❌".length === 1,所以只有一个字符

这与不同肤色的表情符号的工作方式相似。

至于如何比较,我认为"✔️".codePointAt(0)(不要与charCodeAt()混淆)可能会有所帮助。见https://thekevinscott.com/emojis-in-javascript/:

codePointAt和fromCodePoint是ES2015中引入的新方法,可以处理UTF-16编码大于16位的unicode字符,其中包括表情符号。使用这些代替charCodeAt,它不能正确处理表情符号。

我相信'✔️'是由2个组件组成的。当您输出'✔️'[0]时,您得到'✔',并且黑色复选标记不等于绿色复选标记。

但是,'❌'只由一个组件组成,所以当您输出'❌'[0]时,您得到的是相同的东西:'❌'。

第二个字符'✔️'[1](代码点= 65039)是Variation Selector

变异选择器指定前面的字符应该与表情符号一起显示演示。仅当前一个字符默认为时才需要文本表示。

常用于表情符号ZWJ序列中,其中序列有文字和表情符号表示,但默认为文字(黑白)显示。

雪人作为文本的例子:雪人的表情符号:☃️

黑色的心作为文本:❤。黑心作为表情符号:❤️(不那么黑)

Variation Selector-16在2002年被批准为Unicode 3.2的一部分。

https://unicode-table.com/en/FE0F/

相关内容

  • 没有找到相关文章

最新更新