Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

String.fromCodePoint()

这篇翻译不完整。请帮忙从英语翻译这篇文章

String.fromCodePoint()是String的静态方法,该方法使用指定的unicode参数返回一个primitive的字符串。与fromCharCode功能类似,但是支持的Unicode字符更全,但是浏览器支持情况不是太好,目前ie以及safari还不支持。另外,性能并没有fromCharCode快。因为是ES6当中的新定义的特性,所以目前还不适合放到正式产品环境中去使用。

语法

String.fromCodePoint(num1[, ...[, numN]])

参数

num1, ..., numN
一串Unicode编码.

异常

RangeError
如果传入无效的Unicode编码,将会抛出一个RangeError (e.g. "RangeError: NaN is not a valid code point").

说明

因为 fromCodePoint()  是 String的一个静态方法,所以只能通过String.fromCodePoint()这样的方式来使用,不能在字符串String对象的实例上直接调用。

例子

使用 fromCodePoint()

String.fromCodePoint(42);       // "*"
String.fromCodePoint(65, 90);   // "AZ"
String.fromCodePoint(0x404);    // "\u0404"
String.fromCodePoint(0x2F804);  // "\uD87E\uDC04"
String.fromCodePoint(194564);   // "\uD87E\uDC04"
String.fromCodePoint(0x1D306, 0x61, 0x1D307) // "\uD834\uDF06a\uD834\uDF07"

String.fromCodePoint('_');      // RangeError
String.fromCodePoint(Infinity); // RangeError
String.fromCodePoint(-1);       // RangeError
String.fromCodePoint(3.14);     // RangeError
String.fromCodePoint(3e-2);     // RangeError
String.fromCodePoint(NaN);      // RangeError
// String.fromCharCode() alone cannot get the character at such a high code point
// The following, on the other hand, can return a 4-byte character as well as the
// usual 2-byte ones (i.e., it can return a single character which actually has
// a string length of 2 instead of 1!)
console.log(String.fromCodePoint(0x2F804)); // or 194564 in decimal

Polyfill-浏览器补丁

String.fromCodePoint方法是ECMAScript2015(ES6)新增加的特性,所以一些老的浏览器可能还不支持。可以通过使用下面的polyfill代码来保证浏览器的支持:

 

/*! https://mths.be/fromcodepoint v0.1.0 by @mathias */
if (!String.fromCodePoint) {
  (function() {
    var defineProperty = (function() {
      // IE 8 only supports `Object.defineProperty` on DOM elements
      try {
        var object = {};
        var $defineProperty = Object.defineProperty;
        var result = $defineProperty(object, object, object) && $defineProperty;
      } catch(error) {}
      return result;
    }());
    var stringFromCharCode = String.fromCharCode;
    var floor = Math.floor;
    var fromCodePoint = function() {
      var MAX_SIZE = 0x4000;
      var codeUnits = [];
      var highSurrogate;
      var lowSurrogate;
      var index = -1;
      var length = arguments.length;
      if (!length) {
        return '';
      }
      var result = '';
      while (++index < length) {
        var codePoint = Number(arguments[index]);
        if (
          !isFinite(codePoint) ||       // `NaN`, `+Infinity`, or `-Infinity`
          codePoint < 0 ||              // not a valid Unicode code point
          codePoint > 0x10FFFF ||       // not a valid Unicode code point
          floor(codePoint) != codePoint // not an integer
        ) {
          throw RangeError('Invalid code point: ' + codePoint);
        }
        if (codePoint <= 0xFFFF) { // BMP code point
          codeUnits.push(codePoint);
        } else { // Astral code point; split in surrogate halves
          // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
          codePoint -= 0x10000;
          highSurrogate = (codePoint >> 10) + 0xD800;
          lowSurrogate = (codePoint % 0x400) + 0xDC00;
          codeUnits.push(highSurrogate, lowSurrogate);
        }
        if (index + 1 == length || codeUnits.length > MAX_SIZE) {
          result += stringFromCharCode.apply(null, codeUnits);
          codeUnits.length = 0;
        }
      }
      return result;
    };
    if (defineProperty) {
      defineProperty(String, 'fromCodePoint', {
        'value': fromCodePoint,
        'configurable': true,
        'writable': true
      });
    } else {
      String.fromCodePoint = fromCodePoint;
    }
  }());
}

标准

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
String.fromCodePoint
Standard Initial definition.
ECMAScript 2017 Draft (ECMA-262)
String.fromCodePoint
Draft  

浏览器兼容情况

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support

41

29 (29) 未实现 28 未实现
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 未实现 未实现 29.0 (29) 未实现 未实现 未实现

相关链接

文档标签和贡献者

 此页面的贡献者: Cattla, lastjune
 最后编辑者: Cattla,