這個其實之前火過一陣子,當時也沒怎么注意,今天看到空間里又有人在刷這個字符了,所以決定分析下他是什么東西、
復制這個字符在控制台查看 "a๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎".length 發現他的長度是 20,怎么會是20呢?
我們依次調試 "a๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎".charAt(0), "a๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎".charAt(1), "a๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎".charAt(2) 可以發現第一個字符是a 后面都是其他什么東西組成的。
當你黏貼到notepad++之類的編輯器里,也會發現這個問題,后台那些是重復的字符,而且都可以看到。
這些字符到底是什么東西呢?
突然想起js聖經上貌似記載過一個 é 字符,他的 unicode 是 \u00e9, 但是也可以用 'e' + '\u0301' 實現 "é" 前者 length 是 1,后者 length 是 2。
'\u0301' 在這里起到了語調符的作用,然后我就喪心病狂的 'e'+Array(20).join('\u0301'); 發現竟然成功了,果然是這個東西,但是這個語調符有哪些呢。
繼續尋找答案,在聖經的注釋里發現了他貌似屬於 Mn 類,去unicode官方找這個東西,一番尋找后終於找到他了,詳情請參閱。
這里解釋了 Mn 其實是 a nonspacing combining mark (zero advance width) (谷歌翻譯: 一個非空格組合標志(零超前寬度))。
雖然給了解釋,但是還是沒有說他有那些字符啊,所以我繼續尋找答案,功夫不負有心人,終於找到了一張表。
Unicode Characters in the 'Mark, Nonspacing' Category
這里詳細的列出了每個編碼以及對應的意思,還有圖片展現。你可以點擊頭部那個 View all images 超鏈接,這樣你就不必一個一個展開看圖片了。
找到這個的時候我欣喜諾狂,各種測試,發現不僅僅是向上,還有 向左,向下的,但是暫時沒發現向右的。
這里面有很多符號,雖然不知道他們在什么情況下使用,但是我的目的達到了,后續的東西暫時沒欲望刨根問底了。
下面是我找的幾個方向的小尾巴,大家也可以自己去各種測試起來。。
'呵呵'+Array(20).join('\u0310'); // "呵呵̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐"
'呵呵'+Array(20).join('\u031D'); // "呵呵̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝̝"
'呵呵'+Array(20).join('\u0E47'); // "呵呵็็็็็็็็็็็็็็็็็็็"
'呵呵'+Array(20).join('\u0e49'); // "呵呵้้้้้้้้้้้้้้้้้้้"
'呵呵'+Array(20).join('\u0598'); // "呵呵֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘"
也可以這么玩...
'呵呵'+Array(20).join('\u0310')+Array(20).join('\u0598')+Array(20).join('\u0e49'); // "呵呵้้้้้้้้้้้้้้้้้้้̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐̐֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘֘"
好了,今天的話題到此結束了。。