String.fromCodePoint()‎

من موسوعة حسوب

الدالة String.fromCodePoint()‎ الساكنة (static) تُعيد سلسلةً نصيةً مُنشَأةً باستخدام سلسلة من قيم المحارف (code points).

البنية العامة

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

num1, ..., numN

سلسلة من الأرقام التي تُمثِّل قيم المحارف (code points).

القيمة المعادة

سلسلة نصية تحتوي على محارف ترتبط بقيم المحارف المُمرَّرة إلى الدالة.

الاستثناءات

سيرمى الاستثناء RangeError إذا مُرِّرَ قيمة محرف يونيكود غير صالحة (مثلًا: "RangeError: NaN is not a valid code point").

الوصف

هذه الدالة تُعيد سلسلةً نصيةً أوليّةً ولا تُعيد كائن String.

لمّا كانت الدالة fromCodePoint هي دالةٌ ساكنة (static method) تابعةٌ للكائن 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()‎ لا يمكنها الحصول على المحارف التي تكون قيمها أكبر من الحد الأقصى، أما المثال الآتية فسيُعيد محرفًا بطول 4-بايت، إضافةً إلى محرفين بطول 2-بايت (أي أنها ستُعيد محرفًا واحدًا الذي يُمثِّل سلسلةً نصيةً طولها 2 بدلًا من 1):

console.log(String.fromCodePoint(0x2F804));

تعويض نقص دعم المتصفحات

الدالة String.fromCodePoint أُضيفَت في معيار ECMAScript 2015 (أي ES6)، وليست مدعومةً في جميع المتصفحات بعد، لذا يمكن استخدام الشيفرة الآتية لتعريفها:

/*! http://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
          // http://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;
    }
  }());
}

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 41 29 غير مدعومة 28 10

على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.

مصادر ومواصفات