这篇翻译不完整。请帮忙从英语翻译这篇文章。
概述
charCodeAt()
方法返回0到65535之间的整数,代表索引处字符的UTF-16编码单元(在Unicode编码单元表示一个单一的UTF-16编码单元的情况下,UTF-16编码单元匹配Unicode编码单元。否则,比如Unicode 编码单元 > 0x10000 的情况下,只能匹配Unicode代理对的第一个编码单元)。如果你希望得到整点编码值,使用codePointAt()
语法
str.charCodeAt(index)
参数
index
- 一个大于等于 0,小于字符串长度的整数。如果不是一个数值,则默认为 0。
描述
Unicode 编码单元(code points)的范围从 0 到 1,114,111。开头的 128 个 Unicode 编码单元和 ASCII 字符编码一样。关于 Unicode 的更多信息,可查看 JavaScript Guide。
注意,charCodeAt
总是返回一个小于 65,536 的值。这是因为高位编码单元(higher code point)使用一对(低位编码(lower valued))代理伪字符("surrogate" pseudo-characters)来表示,从而构成一个真正的字符。因此,为了查看或复制(reproduce)65536 及以上编码字符的完整字符,不仅需要获取 charCodeAt(i)
的值,也需要获取 charCodeAt(i+1)
的值(如同查看/reproducing 拥有两个字符的字符串一样)。参看下面例 2 和例 3。
如果指定的 index 小于 0 或不小于字符串的长度,则 charCodeAt
返回 NaN
。
向后兼容:在历史版本中(如 JavaScript 1.2),charCodeAt
返回一个数字,表示给定 index 处字符的 ISO-Latin-1 编码值。ISO-Latin-1 编码集范围从 0 到 255。开头的 0 到 127 直接匹配 ASCII 字符集。
示例
例子:使用 charCodeAt()
下例返回 65,即 A 的 Unicode 值:
"ABC".charCodeAt(0) // returns 65
修复charCodeAt()
处理非基本多文种平面字符如果之前出现的字符串未知
This version might be used in for loops and the like when it is unknown whether non-BMP characters exist before the specified index position.
function fixedCharCodeAt (str, idx) { // ex. fixedCharCodeAt ('\uD800\uDC00', 0); // 65536 // ex. fixedCharCodeAt ('\uD800\uDC00', 1); // false idx = idx || 0; var code = str.charCodeAt(idx); var hi, low; // High surrogate (could change last hex to 0xDB7F to treat high // private surrogates as single characters) if (0xD800 <= code && code <= 0xDBFF) { hi = code; low = str.charCodeAt(idx+1); if (isNaN(low)) { throw 'High surrogate not followed by low surrogate in fixedCharCodeAt()'; } return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; } if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate // We return false to allow loops to skip this iteration since should have // already handled high surrogate above in the previous iteration return false; /*hi = str.charCodeAt(idx-1); low = code; return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;*/ } return code; }
修复charCodeAt()
处理非基本多文种平面字符如果之前出现的字符串已知
function knownCharCodeAt (str, idx) { str += ''; var code, end = str.length; var surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; while ((surrogatePairs.exec(str)) != null) { var li = surrogatePairs.lastIndex; if (li - 2 < idx) { idx++; } else { break; } } if (idx >= end || idx < 0) { return NaN; } code = str.charCodeAt(idx); var hi, low; if (0xD800 <= code && code <= 0xDBFF) { hi = code; low = str.charCodeAt(idx+1); // Go one further, since one of the "characters" is part of a surrogate pair return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; } return code; }
规范
Specification | Status | Comment |
---|---|---|
ECMAScript 1st Edition. | Standard | Initial definition. Implemented in JavaScript 1.2 |
ECMAScript 5.1 (ECMA-262) String.prototype.charCodeAt |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) String.prototype.charCodeAt |
Standard |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |