在移动端开发时,需求要对姓名昵称进行脱敏,有的用户的昵称里经常会有表情等字符,按正常字符串进行操作在安卓上会出现乱码、ios上不显示。
经排查:JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节,而每个表情为4个字节。
noPassByName(str){ if(str){ let arr =[] for(let s of str){ arr.push(s) } if(arr.length==2){ return arr[0]+'*' }else if(arr.length>2){ let char = ''; for(let i=0;i<arr.length-2;i++){ char += '*' } return arr[0]+ char +arr[arr.length-1] } } else { return ""; } }
这里利用for-of是
遍历的value
值,刚好符合要求。
方法二:
es6的codePointAt()方法(这里就不多解释了)