JavaScript の String.slice と String.substring の違い

Tahseen Tauseef 2023年10月12日
  1. JavaScript の文字列プロトタイプとは何ですか
  2. JavaScript の slicesubstring とは
  3. JavaScript の slicesubstring の類似点は何ですか
  4. JavaScript の slicesubstring の違いは何ですか
JavaScript の String.slice と String.substring の違い

このチュートリアル記事では、JavaScript のスライスとサブストリングとは何か、それらを区別するものとそうでないものについて説明します。この記事では、次の質問に対処します。

  • 文字列とプロトタイプとは
  • slicesubstring とは何ですか
  • slicesubstring の類似点は何ですか
  • slicesubstring の違いは何ですか

JavaScript の文字列プロトタイプとは何ですか

String オブジェクトについて説明することから始めましょう。文字列オブジェクトは、文字のシーケンスを表すために使用され、テキストとして表す必要のあるデータで一般的に使用されます。

プリミティブ値にプロパティまたはメソッドを含めることはできません。

JavaScript は、ヘルパーメソッドやプロパティなどの追加機能を提供する特別なオブジェクトラッパーでプリミティブ値をラップすることにより、プリミティブ値をオブジェクトとして扱います。各プリミティブ型にはオブジェクトラッパーがあります。文字列型は String と呼ばれます。

prototype に注目しましょう。prototype は、すべての JavaScript オブジェクトを含むグローバルプロパティです。これにより、既存のオブジェクトに新しいメソッドとプロパティを追加できます。

function footballClub(name, stadium, founded) {
  this.name = name;
  this.stadium = stadium;
  this.founded = founded;
}
footballClub.prototype.firstTeamPlayers = 11;

const FCB = new footballClub('FC Barcelona', 'Camp Nou', 1899);
console.log(FCB.firstTeamPlayers);
// logs 11

出力:

11

上記の例では、各 footballClub インスタンスの firstTeamPlayers プロパティが 11 に設定されています。同様に、prototype プロパティを使用すると、新しいプロパティとメソッドを文字列に追加できます。

JavaScript の slicesubstring とは

slicesubstring は、関数の形式ですべての JavaScript 文字列に存在するプロトタイププロパティです。slice および substring 関数は、文字列の一部を抽出し、それを新しい文字列として返します。slice メソッドは元の string を変更しません。

2つの引数を取ります。最初の引数は抽出を開始する開始インデックスを指定し(インデックスは 0 から始まります)、2 番目の引数は文字列の終了インデックスを指定します(終了インデックスは抽出の一部として含まれません)。

let str = 'Gonna be extracted,Help!';
let slicedStr = str.slice(3, 8);
let substringStr = str.substring(3, 8);
console.log(slicedStr)     // logs: na be
console.log(substringStr)  // logs: na be

出力:

na be
na be

JavaScript の slicesubstring の類似点は何ですか

startstop と等しい場合、slicesubstring の両方が空の文字列を返します。

let str = 'Gonna be extracted,Help!';
let slicedStr = str.slice(8, 8);
let substringStr = str.substring(9, 8);
console.log(slicedStr)     // logs:
console.log(substringStr)  // logs:

出力:

stop(2 番目の引数)に slicesubstring の両方が含まれていない場合、文字列の最後まで文字を抽出します。

let str = "Gonna be extracted,Help!"; 
let slicedStr = str.slice(3);
let substringStr = str.substring(3);
console.log(slicedStr) // logs: na be extracted,Help!
console.log(substringStr) // logs: na be extracted,Help!

出力:

na be extracted,Help!
na be extracted,Help!

start または stop 引数のいずれかが文字列の長さより大きい場合、渡された引数の代わりに文字列の長さが使用されます。

let str = 'Gonna be extracted,Help!';
let slicedStr = str.slice(1, 100);
let substringStr = str.substring(1, 100);
console.log(slicedStr)     // logs: onna be extracted,Help!
console.log(substringStr)  // logs: onna be extracted,Help!

出力:

onna be extracted,Help!
onna be extracted,Help!

JavaScript の slicesubstring の違いは何ですか

start 引数が slicestop 引数よりも大きい場合、空の文字列を返しますが、その場合、substring はこれら 2つの引数を交換します。

let str = 'Gonna be extracted,Help!';
let slicedStr = str.slice(8, 3);
let substringStr = str.substring(8, 3);
console.log(slicedStr)     // logs:
console.log(substringStr)  // logs: na be

出力:

na be

start 引数または stop 引数が負または NaN の場合、その値は substring では 0 であるかのように扱われますが、slice では start 引数が負の場合、文字列の終わり。

let str = 'Gonna be extracted,Help!';
let slicedStr = str.slice(-1);
let substringStr = str.substring(-1);
console.log(slicedStr)     // logs: !
console.log(substringStr)  // logs: Gonna be extracted,Help!

出力:

!
Gonna be extracted,Help!

関連記事 - JavaScript String