2021年12月7日 JavaScript (JS Primer) 文字列とUnicode
UnicodeとCode Unit
Unicodeはすべての文字に対してID(Code Point)を振ることを目的に作成されている仕様です。
Unicodeでは1文字を表すのに使う最小限のビットの組み合わせをCode Unit(符号単位)と呼ぶ。
Unicode は仕様
Code Unitは一文字を表しているもの
とすると覚えやすいかもしれません。
Code Point
Unicodeはすべての文字に対してIDを定義する目的で策定されている仕様です。
この「文字」に対する「一意のID」のことをCode Point(符号位置)と呼びます。
String#codePointAtメソッド
文字列のCode Pointの値を返します。引数にインデックス番号を指定してください。
"文字列".codePointAt(インデックス番号)
console.log("あいう".codePointAt(0)); // => 12354 console.log("あいう".codePointAt(2)); // => 12358
String.fromCodePointメソッド
引数にCode Pointを持たせるとそれに対応する文字を返します。
console.log(String.fromCodePoint(12355)); // => "あ" console.log(String.fromCodePoint(0x3042)); // => "あ"
- Code Pointが
12354
の文字を取得しています。 12354
を16進数リテラルで表記しても同じ結果になります。
エスケープシーケンス
文字列を特殊文字として認識させる \○ で書くものです。(丸にはアルファベット一文字が入り、入る文字で意味がかわります) \n ならば改行であり、今回のように \u ならばUnicodeエスケープシーケンスとなり、16進数の文字列をcodePointで返してくれます。
// "あ"のCode Pointは12354 const codePointOfあ = "あ".codePointAt(0); // 12354の16進数表現は"3042" const hexOfあ = codePointOfあ.toString(16); console.log(hexOfあ);// => "3042" console.log("\u{3042}"); // => "あ"
- "あ"のCode Pointである12354を返して「codePointあ」に代入します。
- 文字列"あ"を16進数に変換します。
- 16進数の前にエスケープシーケンスを書くことで文字列"あ"を表現しています。
文字列.toString(○進数) とすると文字列を指定した進数に変換して返すことができます。
復習
プロトタイプとは
- JavaScriptにおけるほとんどすべてのオブジェクトはObject.prototypeプロパティに定義されたprototypeオブジェクトを継承しています。
- すべてのオブジェクトの作成時に自動的に追加される特殊なオブジェクトです。
- すべてのオブジェクトから利用できるメソッドなどを提供するベースオブジェクトとも言えます。
- prototypeオブジェクトに組み込まれているメソッドはプロトタイプメソッドと呼ばれます。toStringなどがそうです。
String#codePointAtメソッドとString.fromCodePointメソッド #と.の違いの考察
- #はインスタンス経由で呼び出すインスタンスメソッドを表します。又、#はprototypeと同義です。(String#codePointAt = String.prototype.codePointAt)
- .は静的メソッドを表します。
- インスタンスを生成しなくてもオブジェクトから直接呼び出せるプロパティ/メソッド
- Stringの静的メソッドなら文字列を返します。
静的メソッドとインスタンスメソッド
静的プロパティ/静的メソッドとは
「インスタンスを生成しなくてもオブジェクトから直接呼び出せるプロパティ/メソッド」のことである。これに対して、インスタンスを呼び出して、インスタンス経由で呼び出すプロパティ/メソッドのことをインスタンスプロパティ/インスタンスメソッドという。