diff options
author | Masahiro FUJIMOTO <mfujimot@gmail.com> | 2021-09-19 01:00:11 +0900 |
---|---|---|
committer | Masahiro FUJIMOTO <mfujimot@gmail.com> | 2021-09-27 09:36:29 +0900 |
commit | 2cf96f04b53d6d7fc962853757820f0583dedae3 (patch) | |
tree | ca9228eb37aa9a66c80dc47676ec16874a2eb6a6 | |
parent | 8f1bc6e84b137a8970cc78bb84270d7701f6d2e9 (diff) | |
download | translated-content-2cf96f04b53d6d7fc962853757820f0583dedae3.tar.gz translated-content-2cf96f04b53d6d7fc962853757820f0583dedae3.tar.bz2 translated-content-2cf96f04b53d6d7fc962853757820f0583dedae3.zip |
Global_Objects/String/fromCodePoint を更新
- Markdown に変換
- 2021/07/21 時点の英語版に同期
-rw-r--r-- | files/ja/web/javascript/reference/global_objects/string/fromcodepoint/index.md | 244 |
1 files changed, 123 insertions, 121 deletions
diff --git a/files/ja/web/javascript/reference/global_objects/string/fromcodepoint/index.md b/files/ja/web/javascript/reference/global_objects/string/fromcodepoint/index.md index 002ef04424..326d23ee33 100644 --- a/files/ja/web/javascript/reference/global_objects/string/fromcodepoint/index.md +++ b/files/ja/web/javascript/reference/global_objects/string/fromcodepoint/index.md @@ -4,144 +4,146 @@ slug: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint tags: - ECMAScript 2015 - JavaScript - - Method - - Reference + - メソッド + - リファレンス - String + - UTF-32 + - Unicode + - ポリフィル +browser-compat: javascript.builtins.String.fromCodePoint translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint --- -<div>{{JSRef}}</div> - -<p><strong><code>String.fromCodePoint()</code></strong> 静的メソッドは指定されたコードポイントのシーケンスを使って生成された文字列を返します。</p> - -<div>{{EmbedInteractiveExample("pages/js/string-fromcodepoint.html")}}</div> +{{JSRef}} + +**`String.fromCodePoint()`** 静的メソッドは指定されたコードポイントのシーケンスを使って生成された文字列を返します。 + +{{EmbedInteractiveExample("pages/js/string-fromcodepoint.html","shorter")}} + +## 構文 + +```js +String.fromCodePoint(num1) +String.fromCodePoint(num1, num2) +String.fromCodePoint(num1, num2, ..., numN) +``` + +### 引数 + +- `num1, ..., numN` + - : コードポイントの並びです。 + +### 返値 + +指定されたコードポイントの並びを使って生成された文字列です。 + +### 例外 + +- 無効な Unicode コードポイントが与えられた場合、{{jsxref("Errors/Not_a_codepoint", "RangeError")}} (例えば "RangeError: NaN is not a valid code point") が発生します。 + +## 解説 + +このメソッドは ({{jsxref("String")}} オブジェクトでは*なく*) 文字列を返します。 + +`fromCodePoint()` メソッドは {{jsxref("String")}} の静的なメソッドなので、自ら生成した {{jsxref("String")}} オブジェクトのメソッドとしてではなく、常に `String.fromCodePoint()` として使用してください。 + +## ポリフィル + +`String.fromCodePoint` メソッドは ECMAScript 2015 で追加されました。まだすべてのウェブブラウザーや環境で対応していないかもしれません。 + +ポリフィルとして以下のコードを使用してください。 + +```js +if (!String.fromCodePoint) (function(stringFromCharCode) { + var fromCodePoint = function(_) { + var codeUnits = [], codeLen = 0, result = ""; + for (var index=0, len = arguments.length; index !== len; ++index) { + var codePoint = +arguments[index]; + // correctly handles all cases including `NaN`, `-Infinity`, `+Infinity` + // The surrounding `!(...)` is required to correctly handle `NaN` cases + // The (codePoint>>>0) === codePoint clause handles decimals and negatives + if (!(codePoint < 0x10FFFF && (codePoint>>>0) === codePoint)) + throw RangeError("Invalid code point: " + codePoint); + if (codePoint <= 0xFFFF) { // BMP code point + codeLen = codeUnits.push(codePoint); + } else { // Astral code point; split in surrogate halves + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + codePoint -= 0x10000; + codeLen = codeUnits.push( + (codePoint >> 10) + 0xD800, // highSurrogate + (codePoint % 0x400) + 0xDC00 // lowSurrogate + ); + } + if (codeLen >= 0x3fff) { + result += stringFromCharCode.apply(null, codeUnits); + codeUnits.length = 0; + } + } + return result + stringFromCharCode.apply(null, codeUnits); + }; + try { // IE 8 only supports `Object.defineProperty` on DOM elements + Object.defineProperty(String, "fromCodePoint", { + "value": fromCodePoint, "configurable": true, "writable": true + }); + } catch(e) { + String.fromCodePoint = fromCodePoint; + } +}(String.fromCharCode)); +``` +## 例 +## `fromCodePoint()` の使用 -<h2 id="Syntax" name="Syntax">構文</h2> +有効な入力: -<pre class="syntaxbox"><code>String.fromCodePoint(<var>num1</var>[, ...[, <var>numN</var>]])</code></pre> +```js +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" +``` -<h3 id="Parameters" name="Parameters">引数</h3> +無効な入力: -<dl> - <dt><code>num1, ..., num<em>N</em></code></dt> - <dd>コードポイントのシーケンスです。</dd> -</dl> +```js +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 +``` -<h3 id="Return_value" name="Return_value">戻り値</h3> +### `fromCharCode()` との比較 -<p>指定されたコードポイントのシーケンスを使って生成された文字列です。</p> +{{jsxref("String.fromCharCode()")}} では補助文字 (すなわち `0x010000` – `0x10FFFF`) のコードポイントを指定することで返すことができません。 +補助文字を返すためには、 UTF-16 のサロゲートペアでが必要です。 -<h3 id="Exceptions" name="Exceptions">例外</h3> +```js +String.fromCharCode(0xD83C, 0xDF03); // Code Point U+1F303 "Night with +String.fromCharCode(55356, 57091); // Stars" == "\uD83C\uDF03" +``` -<ul> - <li>無効な Unicode コードポイントを与えられた場合、{{jsxref("Errors/Not_a_codepoint", "RangeError")}} (例: "RangeError: NaN is not a valid code point" )がスローされます。</li> -</ul> +一方、 `String.fromCodePoint()` はコードポイント (UTF-32 のコードユニットに相当) を指定することで、 4 バイトの補助文字や、一般的な 2 バイトの BMP 文字を返すことができます。 -<h2 id="Description" name="Description">説明</h2> +```js +String.fromCodePoint(0x1F303); // または 10 進数で 127747 +``` -<p>このメソッドは {{jsxref("String")}} オブジェクトではなく文字列を返します。</p> +## 仕様書 -<p><code>fromCodePoint()</code> メソッドは {{jsxref("String")}} の静的なメソッドなので、自ら生成した {{jsxref("String")}} オブジェクトのメソッドとしてではなく、常に <code>String.fromCodePoint()</code> として使用してください。</p> +{{Specifications}} -<h2 id="Examples" name="Examples">例</h2> +## ブラウザーの互換性 -<h3 id="Using_fromCharCode" name="Using_fromCharCode"><code>fromCodePoint()</code> を使う</h3> +{{Compat}} -<pre class="brush: js">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 -</pre> - -<pre class="brush: js">// 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 -</pre> - -<h2 id="Polyfill" name="Polyfill">ポリフィル</h2> - -<p><code>String.fromCodePoint</code> メソッドは ECMAScript 2015 で追加されました。まだすべての Web ブラウザーや環境でサポートされていないかもしれません。互換性のために次のコードを使用してください。</p> - -<pre class="brush: js">if (!String.fromCodePoint) (function(stringFromCharCode) { - var fromCodePoint = function(_) { - var codeUnits = [], codeLen = 0, result = ""; - for (var index=0, len = arguments.length; index !== len; ++index) { - var codePoint = +arguments[index]; - // correctly handles all cases including `NaN`, `-Infinity`, `+Infinity` - // The surrounding `!(...)` is required to correctly handle `NaN` cases - // The (codePoint>>>0) === codePoint clause handles decimals and negatives - if (!(codePoint < 0x10FFFF && (codePoint>>>0) === codePoint)) - throw RangeError("Invalid code point: " + codePoint); - if (codePoint <= 0xFFFF) { // BMP code point - codeLen = codeUnits.push(codePoint); - } else { // Astral code point; split in surrogate halves - // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - codePoint -= 0x10000; - codeLen = codeUnits.push( - (codePoint >> 10) + 0xD800, // highSurrogate - (codePoint % 0x400) + 0xDC00 // lowSurrogate - ); - } - if (codeLen >= 0x3fff) { - result += stringFromCharCode.apply(null, codeUnits); - codeUnits.length = 0; - } - } - return result + stringFromCharCode.apply(null, codeUnits); - }; - try { // IE 8 only supports `Object.defineProperty` on DOM elements - Object.defineProperty(String, "fromCodePoint", { - "value": fromCodePoint, "configurable": true, "writable": true - }); - } catch(e) { - String.fromCodePoint = fromCodePoint; - } -}(String.fromCharCode)); -</pre> - -<h2 id="Specifications" name="Specifications">仕様</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">仕様</th> - <th scope="col">状況</th> - <th scope="col">コメント</th> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td>初期定義</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> - -<p>{{Compat("javascript.builtins.String.fromCodePoint")}}</p> - -<h2 id="See_also" name="See_also">関連情報</h2> - -<ul> - <li>{{jsxref("String.fromCharCode()")}}</li> - <li>{{jsxref("String.prototype.charAt()")}}</li> - <li>{{jsxref("String.prototype.codePointAt()")}}</li> - <li>{{jsxref("String.prototype.charCodeAt()")}}</li> -</ul> +- `String.fromCodePoint` のポリフィルが [`core-js`](https://github.com/zloirock/core-js#ecmascript-string-and-regexp) で利用できます +- {{jsxref("String.fromCharCode()")}} +- {{jsxref("String.prototype.charAt()")}} +- {{jsxref("String.prototype.codePointAt()")}} +- {{jsxref("String.prototype.charCodeAt()")}} |