[@@iterator]【イテレータ作成 (for-of)】メソッド
charAt【指定位置の文字】メソッド
charCodeAt【指定位置のUnicode値】メソッド
codePointAt【指定位置のコードポイント値】メソッド

String.prototype.[@@iterator]【イテレータ作成 (for-of)】

メモ

  • コードポイント値のイテレータオブジェクト作成
  • for-of【プロパティ値反復処理】が利用可能
  • 順に処理することで、サロゲートペアの処理が可能

構文

[ @@iterator ] ( )

  • なし

  • イテレータオブジェクト

var str1 = "text";
var strIter1 = str1[Symbol.iterator]();
console.log(strIter1.next().value);  // 出力:t
console.log(strIter1.next().value);  // 出力:e
console.log(strIter1.next().value);  // 出力:x
console.log(strIter1.next().value);  // 出力:t
console.log(strIter1.next().value);  // 出力:undefined
for (var c of str1) {
  console.log(c, "0x" + c.codePointAt(0).toString(16));
}
// 出力:t 0x74
// 出力:e 0x65
// 出力:x 0x78
// 出力:t 0x74

var str2 = "テキスト";
var strIter2 = str2[Symbol.iterator]();
console.log(strIter2.next().value);  // 出力:テ
console.log(strIter2.next().value);  // 出力:キ
console.log(strIter2.next().value);  // 出力:ス
console.log(strIter2.next().value);  // 出力:ト
console.log(strIter2.next().value);  // 出力:undefined
for (var c of str2) {
  console.log(c, "0x" + c.codePointAt(0).toString(16));
}
// 出力:テ 0x30c6
// 出力:キ 0x30ad
// 出力:ス 0x30b9
// 出力:ト 0x30c8

var str3 = "𠮟る";   // 𠮟:U+20B9F(第3水準) る:U+308B
var strIter3 = str3[Symbol.iterator]();
console.log(strIter3.next().value);  // 出力:𠮟
console.log(strIter3.next().value);  // 出力:る
console.log(strIter3.next().value);  // 出力:undefined

for (var c of str3) {
  console.log(c, "0x" + c.codePointAt(0).toString(16));
}
// 出力:𠮟 0x20b9f
// 出力:る 0x308b

String.prototype.charAt【指定位置の文字】

メモ

構文

charAt (pos)

  • pos:位置 (0 ~ 【文字列長】 - 1)

  • 指定位置の文字 (範囲外:空文字)

var str = "text";
console.log(str.charAt(2), str[2]); // 出力:x x

str = "テキスト";
console.log(str.charAt(2), str[2]); // 出力:ス ス

// 範囲外
console.log("[" + str.charAt(4) + "]"); // 出力:[]
console.log(str[4]);                    // 出力:undefined

// サロゲートペア
str = "𠮟る";                           // 𠮟:U+20B9F(第3水準) る:U+308B
console.log(str.length);                // 出力:3
for (var i = 0; i < str.length; i++) {
  console.log(i, str.charAt(i));
}
// 出力:0 "(不正文字)"
// 出力:1 "(不正文字)"
// 出力:2 "る"

String.prototype.charCodeAt【指定位置のUnicode値】

メモ

構文

charCodeAt ( pos )

  • pos:位置 (0 ~ 【文字列長】 - 1)

  • 指定位置のUnicode値 (範囲外:NaN)

var str = "text";
var c = str.charCodeAt(2);
console.log("0x" + c.toString(16), String.fromCharCode(c));  // 出力:0x78 x

str = "テキスト";
c = str.charCodeAt(2);
console.log("0x" + c.toString(16), String.fromCharCode(c));  // 出力:0x30b9 ス

// 範囲外
console.log(str.charCodeAt(4));                              // 出力:NaN

// サロゲートペア
str = "𠮟る";                           // 𠮟:U+20B9F(第3水準) る:U+308B
console.log(str.length);                // 出力:3
for (var i = 0; i < str.length; i++) {
  c = str.charCodeAt(i);
  console.log(i, "0x" + c.toString(16), String.fromCharCode(c));
}
// 出力:0 "0xd842" "(不正文字)"
// 出力:1 "0xdf9f" "(不正文字)"
// 出力:2 "0x308b" "る"

String.prototype.codePointAt【指定位置のコードポイント値】

メモ

構文

codePointAt ( pos )

  • pos:位置 (0 ~ 【文字列長】 - 1)

  • 指定位置のコードポイント値 (範囲外:undefined)

var str = "text";
var c = str.codePointAt(2);
console.log("0x" + c.toString(16) + " " + String.fromCharCode(c));  // 出力:0x78 x

str = "テキスト";
c = str.codePointAt(2);
console.log("0x" + c.toString(16) + " " + String.fromCharCode(c));  // 出力:0x30b9 ス

// 範囲外
console.log(str.codePointAt(4));                                     // 出力:NaN

// サロゲートペア
str = "𠮟る";                           // 𠮟:U+20B9F(第3水準) る:U+308B
console.log(str.length);                // 出力:3
for (var i = 0; i < str.length; i++) {
  c = str.codePointAt(i);
  console.log(i, "0x" + c.toString(16), String.fromCodePoint(c));
}
// 出力:0 "0x20b9f" "𠮟"
// 出力:1 "0xdf9f" "(不正文字)"
// 出力:2 "0x308b" "る"

関連