コンテンツにスキップ

JavaScript/String

出典: フリー教科書『ウィキブックス(Wikibooks)』

Stringオブジェクトはプリミティブ文字列のラッパーオブジェクトです。 Stringオブジェクトのすべてのインスタンスは、StringオブジェクトのプロトタイプであるString.prototypeを継承します。String.prototypeに定義されたすべてのプロパティやメソッドは、Stringオブジェクトのインスタンスから参照することができます。StringオブジェクトはObjectオブジェクトのプロパティやメソッドを継承します。

プロパティ

[編集]
名称解説
String.lengthStringコンストラクタが受け取る引数の数を返します。常に1です。
String.nameStringコンストラクタの名前を返します。常に"String"です。
String.prototype/code> すべての文字列オブジェクトの祖先となるStringプロトタイプオブジェクトへの参照です。

アクセサ

[編集]

メソッド

[編集]
名称解説
String.fromCharCode()指定されたUTF-16コードユニットのシーケンスから文字列を作成します。
String.fromCodePoint()指定されたコードポイントのシーケンスから文字列を作成します。
String.raw()テンプレート文字列の生の文字列を取得します。

インスタンスメソッド

[編集]
名称解説
String.prototype.at()与えられたインデックスの文字を返します。負のインデックスも可能です。数値以外のインデックスを受け入れてしまう仕様バグがあります。
String.prototype.charAt()与えられたインデックスの文字を返します。
String.prototype.charCodeAt()与えられたインデックスの文字のUnicodeバイト表現を返します。
String.prototype.codePointAt()指定された位置のUnicodeコードポイント値を表す非負整数を返します。
String.prototype.concat()与えられた文字列を連結して返します。
String.prototype.constructor()オブジェクトのプロトタイプを作成した関数を返します。
String.prototype.endsWith()文字列が別の文字列の文字で終わるかどうかを判断し、必要に応じて検索位置を指定してブール値を返します。
String.prototype.includes()ある文字列が別の文字列内に見つかるかどうかを判断し、必要に応じて検索位置を指定してブール値を返します。
String.prototype.indexOf()与えられた文字列が最初に現れるインデックスを返します。見つからない場合は-1を返します。
String.prototype.isWellFormed()文字列にペアになっていないサロゲートが含まれていない場合は true を返します。
String.prototype.lastIndexOf()与えられた文字列が最後に現れるインデックスを返します。見つからない場合は-1を返します。
String.prototype.localeCompare()参照文字列がソート順で指定された文字列の前、後、または同じであるかを示す数値を返します。
String.prototype.matchAll()文字列に対して正規表現を照合し、すべての一致の結果を反復処理する反復子を返します。
String.prototype.match()文字列が正規表現に一致するかどうかを検索します。
String.prototype.normalize()文字列のUnicode正規化形式を返します。
String.prototype.padEnd()現在の文字列が指定された長さに達するように、別の文字列で現在の文字列を (必要に応じて繰り返して) 埋めます。結果として得られる文字列は、指定された長さで右端埋めされます。
String.prototype.padStart()現在の文字列が指定された長さに達するように、別の文字列で現在の文字列を (必要に応じて繰り返して) 埋めます。結果として得られる文字列は、指定された長さで左端埋めされます。
String.prototype.repeat()現在の文字列を特定の回数繰り返して構築された新しい文字列を返します。
String.prototype.replaceAll()文字列内のパターンがすべて一致したものを、置換文字列で置き換えた新しい文字列を返します。パターンは文字列または正規表現にすることができます。
String.prototype.replace()文字列内の一致をパターンで置き換えた新しい文字列を返します。パターンは文字列または正規表現にすることができます。
String.prototype.search()文字列に対して正規表現の一致を検索します。
String.prototype.slice()文字列の一部を抽出し、新しい文字列として返します。
String.prototype.split()文字列を部分文字列の配列に分割し、新しい配列を返します。
String.prototype.startsWith()文字列が別の文字列の文字で始まるかどうかを判断し、必要に応じて検索位置を指定してブール値を返します。
String.prototype.substring()文字列内の2つのインデックスの間にある部分文字列を返します。
String.prototype.substr()文字列内の指定された位置から始まる、指定された文字数の文字を返します。
String.prototype.toLocaleLowerCase()ホストの現在のロケールに従って、文字列を小文字に変換した値を返します。
String.prototype.toLocaleUpperCase()ホストの現在のロケールに従って、文字列を大文字に変換した値を返します。
String.prototype.toLowerCase()文字列を小文字に変換した値を返します。
String.prototype.toString()指定されたオブジェクトを表す文字列を返します。
String.prototype.toUpperCase()文字列を大文字に変換した値を返します。
String.prototype.toWellFormed()ペアになっていないサロゲートをUnicode置換文字U+FFFDに置き換えた文字列を返します。
String.prototype.trimEnd()文字列の末尾から空白文字を削除します。trimRight の別名です。
String.prototype.trimLeft()文字列の先頭から空白文字を削除します。trimStart の別名です。
String.prototype.trimRight()文字列の末尾から空白文字を削除します。trimEnd の別名です。
String.prototype.trimStart()文字列の先頭から空白文字を削除します。
String.prototype.trim()文字列の両端から空白文字を削除します。
String.prototype.valueOf()String オブジェクトのプリミティブ値を返します。

HTML ラッパーメソッド

[編集]

StringインスタンスのHTML ラッパーメソッドはすべて非推奨であり、後方互換のためだけに残されています。

名称解説
String.prototype.anchor()<a name="name">string</a> を生成します。HTML5ではA要素のname属性は廃止されました。
String.prototype.big()<big>string</big> を生成します。
String.prototype.blink()<blink>string</blink> を生成します。
String.prototype.bold()<b>string</b> を生成します。
String.prototype.fixed()<tt>string</tt> を生成します。
String.prototype.fontcolor()<font color="color">sting</font> を生成します。
String.prototype.fontsize()<font size="size">string</font> を生成します。
String.prototype.italics()<i>string</i> を生成します。
String.prototype.link()<a href="href">string</a> を生成します。
String.prototype.small()<small>string</small> を生成します。
String.prototype.strike()<strike>string</strike> を生成します。
String.prototype.sub()<sub>string</sub> を生成します。
String.prototype.sup()<sup>string</sup> を生成します。

文字列の成分へのアクセス

[編集]

1. スプレッド構文(推奨)

[編集]
  • 文字列の成分にアクセスする最も安全で柔軟な方法は、スプレッド構文(Spread Syntax)を使用することです。
  • スプレッド構文を使うと、文字列を個々の文字に分割し、配列として扱うことができます。これにより、サロゲートペア(例: 絵文字)も正しく処理されます。
consttext="😈🏝👅";constcharacters=[...text];// 文字列を配列に変換console.log(characters[1]);// "🏝"
  • この方法は、以下の利点があります。
    • サロゲートペアに対応: 絵文字や特殊な文字を正しく扱えます。
    • 柔軟性: 配列として扱えるため、map()filter() などの配列メソッドを活用できます。
    • 可読性: コードが直感的で理解しやすい。

2. charAt() メソッド(非推奨)

[編集]
  • charAt() メソッドは、指定されたインデックスの文字を返しますが、サロゲートペアには対応していません。
  • この方法は、現代のJavaScriptでは非推奨とされています。
console.log('😈🏝👅'.charAt(1));// 不正な文字が返される
  • 問題点:
    • サロゲートペアを正しく扱えない。
    • 文字列の長さが予想外の結果を返すことがある。

3. ブラケット記法(非推奨)

[編集]
  • 文字列を配列のように扱い、ブラケット記法([])で特定の位置の文字にアクセスする方法もありますが、これもサロゲートペアには対応していません。
  • この方法も非推奨です。
console.log('😈🏝👅'[1]);// 不正な文字が返される
  • 問題点:
    • サロゲートペアを正しく扱えない。
    • 文字列がイミュータブル(不変)であるため、誤解を招く可能性がある。

なぜスプレッド構文が推奨されるのか?

[編集]

1. サロゲートペアへの対応

[編集]
  • スプレッド構文は、サロゲートペアを正しく分割し、個々の文字として扱います。
  • これにより、絵文字や特殊な文字を安全に操作できます。
consttext="😈🏝👅";constcharacters=[...text];console.log(characters);// ["😈", "🏝", "👅"]

2. 柔軟性と機能性

[編集]
  • スプレッド構文で文字列を配列に変換すると、配列のメソッド(map()filter()forEach() など)を活用できます。
  • これにより、文字列操作がより柔軟で強力になります。
consttext="😈🏝👅";constreversed=[...text].reverse().join("");console.log(reversed);// "👅🏝😈"

3. 可読性と保守性

[編集]
  • スプレッド構文は、コードが直感的で理解しやすいため、保守性が高まります。
  • 他の方法に比べて、バグが発生しにくいです。

まとめ

[編集]
  • 文字列の成分にアクセスする際は、スプレッド構文を使用することが推奨されます。
    • 例: const characters = [...text];
  • charAt() メソッドブラケット記法は、サロゲートペアに対応しておらず、非推奨です。
  • スプレッド構文は、サロゲートペアに対応し、柔軟性と可読性が高いため、現代のJavaScript開発において最適な方法です。

これらの理由から、文字列操作にはスプレッド構文を積極的に活用しましょう。

下位階層のページ

[編集]

脚註

[編集]


外部リンク

[編集]

附録

[編集]

静的プロパティ

[編集]
String.length
String.name
String.prototype

静的アクセサ

[編集]

静的メソッド

[編集]
String.fromCharCode()
String.fromCodePoint()
String.raw()

継承関係

[編集]

Stringのインスタンスプロパティ

[編集]
String.prototype.length

Stringのインスタンスアクセサ

[編集]

Stringのインスタンスメソッド

[編集]

Stringのインスタンスプロパティ

[編集]
String.prototype.length

Stringのインスタンスアクセサ

[編集]

Stringのインスタンスメソッド

[編集]
String.prototype.anchor()
String.prototype.at()
String.prototype.big()
String.prototype.blink()
String.prototype.bold()
String.prototype.charAt()
String.prototype.charCodeAt()
String.prototype.codePointAt()
String.prototype.concat()
String.prototype.constructor()
String.prototype.endsWith()
String.prototype.fixed()
String.prototype.fontcolor()
String.prototype.fontsize()
String.prototype.includes()
String.prototype.indexOf()
String.prototype.italics()
String.prototype.lastIndexOf()
String.prototype.link()
String.prototype.localeCompare()
String.prototype.match()
String.prototype.matchAll()
String.prototype.normalize()
String.prototype.padEnd()
String.prototype.padStart()
String.prototype.repeat()
String.prototype.replace()
String.prototype.replaceAll()
String.prototype.search()
String.prototype.slice()
String.prototype.small()
String.prototype.split()
String.prototype.startsWith()
String.prototype.strike()
String.prototype.sub()
String.prototype.substr()
String.prototype.substring()
String.prototype.sup()
String.prototype.toLocaleLowerCase()
String.prototype.toLocaleUpperCase()
String.prototype.toLowerCase()
String.prototype.toString()
String.prototype.toUpperCase()
String.prototype.trim()
String.prototype.trimEnd()
String.prototype.trimLeft()
String.prototype.trimRight()
String.prototype.trimStart()
String.prototype.valueOf()
String.prototype [ Symbol.iterator ] ()

Objectのインスタンスプロパティ

[編集]

Objectのインスタンスアクセサ

[編集]
get Object.prototype.__proto__

Objectのインスタンスメソッド

[編集]
Object.prototype.__defineGetter__()
Object.prototype.__defineSetter__()
Object.prototype.__lookupGetter__()
Object.prototype.__lookupSetter__()
Object.prototype.constructor()
Object.prototype.hasOwnProperty()
Object.prototype.isPrototypeOf()
Object.prototype.propertyIsEnumerable()
Object.prototype.toLocaleString()
Object.prototype.toString()
Object.prototype.valueOf()
close