6時だョ!!全員集合!!

Rails・JavaScrictを中心にアウトプットします。

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の静的メソッドなら文字列を返します。

静的メソッドとインスタンスメソッド

静的プロパティ/静的メソッドとは
インスタンスを生成しなくてもオブジェクトから直接呼び出せるプロパティ/メソッド」のことである。これに対して、インスタンスを呼び出して、インスタンス経由で呼び出すプロパティ/メソッドのことをインスタンスプロパティ/インスタンスメソッドという。

参考

JavaScript Primer   

初心者による 静的プロパティ/静的メソッド

静的メソッド