[@@iterator]【イテレータ作成】
charAt【指定位置の文字】
charCodeAt【指定位置のUnicode値】
codePointAt【指定位置のコードポイント値】
String.prototype.[@@iterator]【イテレータ作成】
メモ
- コードポイント値のイテレータオブジェクト作成
- for-of【プロパティ値反復処理】が利用可能
- 順に処理することで、サロゲートペアの処理が可能
- 外部リンク (英語)
String.prototype [ @@iterator ] ( ) ES2021 (12) ES2020 (11) ES2019 (10) Iteration ES2021 (12) ES2020 (11) ES2019 (10)
構文
string[ Symbol.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【指定位置の文字】
メモ
- 指定位置の文字を取得
- []【文字アクセス】でも可能
- サロゲートペア(4バイト)は未対応 ([@@iterator]【イテレータ作成】で対応)
- 関連
- 外部リンク (英語)
String.prototype.charAt (pos) ES2021 (12) ES2020 (11) ES2019 (10)
構文
string.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値】
メモ
- 指定位置のUnicode値を取得
- サロゲートペア(4バイト)は未対応 ([@@iterator]【イテレータ作成】で対応)
- Unicode値から文字列:fromCharCode【Unicode値から文字列生成】
- 関連
- 外部リンク (英語)
String.prototype.charCodeAt (pos) ES2021 (12) ES2020 (11) ES2019 (10)
構文
string.charCodeAt( pos )
戻り値指定位置のUnicode値 (範囲外:NaN)
pos位置 (0 ~ 【文字列長】 - 1)
例
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【指定位置のコードポイント値】
メモ
- 指定位置のコードポイント値を取得
- コードポイント値 < 0x110000
- サロゲートペア(4バイト)は不備あり ([@@iterator]【イテレータ作成】で対応)
- コードポイント値から文字列: fromCodePoint【コードポイント値から文字列生成】
- 関連
- 外部リンク (英語)
String.prototype.codePointAt ( pos ) ES2021 (12) ES2020 (11) ES2019 (10)
構文
string.codePointAt( pos )
戻り値指定位置のコードポイント値 (範囲外:undefined)
pos位置 (0 ~ 【文字列長】 - 1)
例
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" "る"