toString【文字列変換】
valueOf【String型変換】
toLowerCase【小文字変換】
toUpperCase【大文字変換】
toLocaleLowerCase【小文字変換 (現在ロケール)】
toLocaleUpperCase【大文字変換 (現在ロケール)】
isWellFormed【サロゲートペア適正チェック】
toWellFormed【サロゲートペア適正変換】

String.prototype.toString【文字列変換】

メモ

概要

外部リンク

構文

string.toString()

文字列

let str = new String("あいうえお");
console.log( str );             // 出力:String { "あいうえお" }
console.log( str.toString() );  // 出力:あいうえお
str = new String(NaN);
console.log( str.toString() );  // 出力:NaN
str = new String(Infinity);
console.log( str.toString() );  // 出力:Infinity
str = new String(undefined);
console.log( str.toString() );  // 出力:undefined

String.prototype.valueOf【String型変換】

メモ

概要

外部リンク

構文

string.valueOf()

文字列

let str = new String("あいうえお");
console.log( str );            // 出力:String { "あいうえお" }
console.log( str.valueOf() );  // 出力:あいうえお
str = new String(NaN);
console.log( str.valueOf() );  // 出力:NaN
str = new String(Infinity);
console.log( str.valueOf() );  // 出力:Infinity
str = new String(undefined);
console.log( str.valueOf() );  // 出力:undefined

String.prototype.toLowerCase【小文字変換】
String.prototype.toUpperCase【大文字変換】

メモ

概要

外部リンク

構文

string.toLowerCase()
string.toUpperCase()

変換後の文字列

const str = "xyzXYZxyzXYZ";
console.log( str.toLowerCase() );  // 出力:xyzxyzxyzxyz
console.log( str.toUpperCase() );  // 出力:XYZXYZXYZXYZ
console.log( str );                // 出力:xyzXYZxyzXYZ

String.prototype.toLocaleLowerCase【小文字変換 (現在ロケール)】
String.prototype.toLocaleUpperCase【大文字変換 (現在ロケール)】

メモ

概要

外部リンク

構文

string.toLocaleLowerCase() 
string.toLocaleUpperCase() 
string.toLocaleLowerCase( [reserved1[, reserved2]] ) 
string.toLocaleUpperCase( [reserved1[, reserved2]] ) 

変換後の文字列
reserved1リザーブ (実装依存)
reserved2リザーブ (実装依存)

const str = "xyzXYZxyzXYZ";
console.log( str.toLocaleLowerCase() );  // 出力:xyzxyzxyzxyz
console.log( str.toLocaleUpperCase() );  // 出力:XYZXYZXYZXYZ
console.log( str );                      // 出力:xyzXYZxyzXYZ

String.prototype.isWellFormed【サロゲートペア適正チェック】
String.prototype.toWellFormed【サロゲートペア適正変換】

メモ

概要

  • サロゲートペア適正処理
    • isWellFormed【サロゲートペア適正チェック】:不正な文字列チェック (サロゲートペアが不正な文字を含む)
    • toWellFormed【サロゲートペア適正変換】:適正文字列に変換 (不正なサロゲートペアを U+FFFD に変換)

関連

外部リンク

  • ECMA-262 (英語)
    String.prototype.isWellFormed ( )
    ES2024 (15) ES2023 (14) ES2022 (13)
    String.prototype.toWellFormed ( )
    ES2024 (15) ES2023 (14) ES2022 (13)

構文

string.isWellFormed( ) 

サロゲートペア適正チェック結果 (true:適正 / false:不正)
string.toWellFormed( ) 

変換後の文字列 (不正サロゲートペアは 0xFFFD に変換)

// ハイサロゲート:U+D800 〜 U+DBFF
// ローサロゲート:U+DC00 〜 U+DFFF

const strings = [
  // サロゲートペア不正
  'abc\uD800xyz',  // ハイサロゲートのみ
  'abc\uDFFFxyz',  // ローサロゲートのみ
  'abc\uD800\uDBFFxyz',  // ハイサロゲート連続
  'abc\uDC00\uDFFFxyz',  // ローサロゲート連続
  'abc\uDC00\uDBFFxyz',  // ハイサロゲート・ローサロゲート 逆転
  // サロゲートペア適正
  '子を叱る。',  // 叱:U+53F1
  '子を𠮟る。',  // 𠮟:U+20B9F (0xD842 0xDF9F) 異体字
  '\uD83C\uDFF4\u200D\u2620\uFE0F',  // 絵文字 (海賊旗)
];

for (const str of strings) {
console.log(str.isWellFormed(), str, str.toWellFormed());
}
// 出力:
// false 'abc\uD800xyz' 'abcxyz'
// false 'abc\uDFFFxyz' 'abcxyz'
// false 'abc\uD800\uDBFFxyz' 'abc��xyz'
// false 'abc\uDC00\uDFFFxyz' 'abc��xyz'
// false 'abc\uDC00\uDBFFxyz' 'abc��xyz'
// true '子を叱る。' '子を叱る。'
// true '子を𠮟る。' '子を𠮟る。'
// true '🏴‍☠️' '🏴‍☠️'