Do you see the cover image? I saw that in a post, someone wondered about why it happens as if he had suddenly discovered one of Javascript's hidden features. But what is really happening there?
Let's have some fun with emojis:
const family = 'π¨βπ©βπ§βπ¦'
console.log([...family])
// ['π¨', 'β', 'π©', 'β', 'π§', 'β', 'π¦']
As you see, we have seven elements in the array, not only the member families; We got some emojis glued together with the zero with joiner character.
console.log(family.includes('π¦'))
// do they have a son? returns true!
let familyWithTwoDoughters = family.replace('π¦', 'π§')
// we get this: π¨βπ©βπ§βπ§
Happily this is true not only about family emojis, but also for many emojies we may never use. Here is the technologist emoji (π¨βπ») that is made of π¨ and π»! After googling some stuff, I explored this file on Github:
https://github.com/unicode-org/icu/blob/main/icu4c/source/data/unidata/emoji-zwj-sequences.txt
that contains a long list of them.
An Emoji ZWJ Sequence is a combination of multiple emojis which display as a single emoji on supported platforms.
The formula is to combine multiple emojis using the zero width joiner character:
π¨ + ZWJ + π¬ = π¨βπ¬
π» + ZWJ + β = π»ββοΈ
π + ZWJ + β¬ = πββ¬
You can play with them in Telegram or any other application that supports them. It is not as magical as some people may think and has nothing to do with JS. We can do all of this using PHP, and any programming language supports strings:
$family = 'π¨βπ©βπ§βπ¦';
var_dump(mb_str_split($family));
Thank you.
Top comments (4)
Thank you for sharing this post. Keep up the great work!
Thank you for reading my post! π
That's Funny and insightfulπ
We can think about a translator that translates a text to emojis! π