大家好,我卡颂。
想必大家在业务中应该常常应用开展操作符
(Spread syntax),比方开展数组:
function sum(x, y, z) { return x + y + z;}const numbers = [1, 2, 3];// 6console.log(sum(...numbers));
克隆对象:
const clone = { ...obj };
但你有没有见过如下操作:
本文就来聊聊上述情况的成因。
欢送退出人类高质量前端框架群,带飞
开展操作符对字符串的作用
iterable
是ES2015
减少的类型,开展操作符
能够作用于iterable
,将其开展为0到多个参数。Array
、String
这些常见的类型都属于iterable
。
iterable
能够应用for..of
语法遍历,比方:
for (let i of 'abc') { console.log(i)}// a// b// c
Array
属于iterable
很好了解,然而为什么String
也属于iterable
呢?
这是因为在ES2015
之前,String
根本实现了Array
用于遍历的所有因素,比方:
- 领有
.length
属性 - 能够通过下标拜访索引地位的字符
咱们不探讨这种实现是否正确,只是想说:用于遍历时,String
与Array
体验相似。
所以到了ES2015
,当Array
作为iterable
反对for...of
遍历时,从体验上来说,String
也须要反对同样的语法。
用开展操作符
开展一家三口的后果:
用for...of
遍历,能够看到对应的Unicode
字符:
那么一家三口作为一个emoji
,有什么非凡的呢?
Emoji Sequence
这种由多个emoji
组合成的emoji
被称为Emoji Sequence
,他利用了文字能够组合造成
这一个性。
比方,泰语就是能够组合造成的文字
。
泰语里的萨瓦迪卡(你好)
,写为。你会发现,在字符头上有个帽子。
此外,泰语中的一些字符还有鞋子,比方。
又或者又有帽子又有鞋子,比方:。
在泰语输入法中,用户顺次输出根本字符、帽子、鞋子,组合成须要的字符后再输出完结字符,就拼凑成一个残缺字符。
回到咱们的一家三口,你会发现,开展后的第1、3项为零宽字符(Zero Width Joiner,简称zwj
):
从上述for...of
遍历的后果可知,这个零宽字符为\u200D
。他通常用于排版。但Emoji Sequence
把他拿去作为emoji
之间的胶水。
换言之,你能够用\u200D
将多个emoji
组合成一个Emoji Sequence
。
比方,爸爸,妈妈,小男孩能够组合成一家三口:
当然,小女孩也能够:
小姑娘与学士帽组合成戴学士帽的小姑娘:
总结
当理解组合办法后,你能够用现有emoji
组合成全新的Emoji Sequence
。
两个爸爸带孩子的家庭,两个妈妈带孩子的家庭,这都是能够尝试的嘛~