codePointAt

str.codePointAt(pos)

返回一个Unicode编码点值的非负整数

  1. '😀'.codePointAt(0) // 128512

charCodeAt

str.charCodeAt(index)

  • index是一个大于等于0,小于字符串长度的整数,如果不是一个数值,则默认为0
  • index超出范围,返回NaN

返回0~65535之间的整数,表示给定索引处的UTF-16编码单元

  1. '😀'.charCodeAt(0) // 55357
  2. '😀'.charCodeAt(1) // 56832
  3. '😀'.charCodeAt(2) // NaN

💡 拓展

UTF-16编码单元
  • 匹配一个能用UTF-16编码单元表示的Unicode码点(值小于0xFFFFF
  • 如果Unicode码点不能用一个UTF-16编码单元表示,charCodeAt返回的则是这个码点代理对的第一个编码单元;若想获取整个码点的值,使用codePointAt

    代理对 Surrogate Pair
  • UTF-16中用于拓展字符而使用的编码方式

  • 采取四个字节(两个UTF-16编码)来表示一个字符

    fromCodePoint

  • 返回使用户指定的代码点序列创建的字符串

  • 如果在指定位置没有元素返回则返回undefined
  • 如果在索引处开始没有UTF-16代理对,将直接返回在那个索引处的编码单元
    1. String.fromCodePoint(128512) // '😀'

    fromCharCode

    String.fromCharCode(num1, [,…[, numN])

    • num1, …, numN 一系列UTF-16编码单元的数字(0~65535)

返回由指定的UTF-16代码单元序列创建的字符串

  1. String.fromCharCode(55357, 56832) // '😀'

参考链接

🔗 String MDN
📝 emoji列表
🎈 阮一峰 Unicode与js