大家好,我是Kason。想必大家在业务中应该经常用到展开运算符(展开语法),比如展开一个数组:functionsum(x,y,z){returnx+y+z;}constnumbers=[1,2,3];//6console.log(sum(...numbers));克隆对象:constclone={...obj};但是你有没有见过下面的操作:本文就来谈谈造成上述情况的原因。展开运算符对字符串的作用是ES2015新增的可迭代类型。扩展运算符可以作用于可迭代对象并将其扩展为0个或多个参数。Array、String等常见类型都属于iterable。可以使用for..of语法遍历iterable,如:for(letiof'abc'){console.log(i)}//a//b//cArray属于iterable,但是很容易明白为什么String也属于iterable么?这是因为在ES2015之前,String基本实现了Array遍历所用到的所有元素,比如:带有.length属性的字符可以通过下标访问索引位置。我们不讨论这个实现是否正确,只是想说:使用遍历时,String和Array有类似的经历。所以在ES2015中,当Array支持for...of遍历作为一个iterable时,从体验上来说,String也需要支持同样的语法。使用展开运算符展开“一家三口”的结果:使用for...of遍历,可以看到对应的Unicode字符:那么“一家三口”作为表情符号,有什么特别的?EmojiSequence由多个emoji组成的emoji称为EmojiSequence,它利用了文本可以组合形成的特点。例如,泰语是一种可以组合形成的脚本。Sawadhika(你好)在泰语中写作“??????????”。你会注意到角色的头上有一顶“帽子”。此外,泰语中有些字还有“鞋”字,如“??”。或有“帽”、“鞋”之分,如:“???”。在泰语输入法中,用户依次输入“基本字”、“帽子”、“鞋”,将需要的字组合起来后,再输入“尾字”,组成一个完整的字。回到我们的“三口之家”,你会发现展开后的第1项和第3项是“ZeroWidthJoiner”(简称zwj):从上面for...of遍历的结果可以看出,这个零宽字符是\u200D。他通常用于排版。但EmojiSequence将他用作emoji之间的粘合剂。换句话说,您可以使用\u200D将多个表情符号组合成一个表情符号序列。比如“爸爸”“妈妈”“小男孩”可以组合成一个三口之家:当然“小女孩”也可以组合:“小女孩”和“学帽”可以组合组成“戴学士帽的小女孩”:总结了解组合方法后,您可以使用现有的表情符号组成新的表情符号序列。两父一子的家庭,两母一子的家庭,可以试试~
