JavaScript | Stringオブジェクト

JavaScript JavaScript
スポンサーリンク

Stringオブジェクト(初心者向け・やさしく詳しく)

String オブジェクト周りを初心者向けにやさしく、かつ実践で役に立つように丁寧にまとめます。コード例を交えて説明するので、コピペして試してみてください。

1. 「文字列」は2種類ある:プリミティブ値 と Stringオブジェクト

  • 普段使う "hello"'abc'プリミティブな文字列(単なる値)です。
    例: let s = "こんにちは";
  • new String("こんにちは") のように new を付けて作るのが Stringオブジェクト(ラッパー)。内部的にはオブジェクトになります。
    例: let obj = new String("こんにちは");

ポイント:ほとんどの場合はプリミティブな文字列(リテラル)を使えば良く、new String(...) を使う必要はありません。

2. なぜプリミティブでもメソッドが使えるの?

let s = "hello";
console.log(s.length);      // 5
console.log(s.toUpperCase()); // "HELLO"
JavaScript
  • いったん内部で一時的に Stringオブジェクトとして“ラップ”され、メソッドが使えるようになります(自動的に行われるので気にしなくてOK)。

3. valueOf() と toString() の違い

  • valueOf():Stringオブジェクトからプリミティブな文字列値を取り出す。
  • toString():オブジェクトを文字列として表現したものを返す。
  • Stringの場合、両者はほとんど同じ結果になります。
let obj = new String("北海道");
console.log(obj.valueOf()); // "北海道"
console.log(obj.toString()); // "北海道"
JavaScript

4. typeof と比較(よくある落とし穴)

let a = "abc";
let b = new String("abc");

console.log(typeof a); // "string"
console.log(typeof b); // "object"
JavaScript
  • new String(...) はオブジェクトなので typeof"object" になります。
  • 等値比較にも注意:
console.log(a == b);  // true (== は型変換して比較)
console.log(a === b); // false(型も値も同じか確かめる厳密比較)
JavaScript

教訓:文字列はプリミティブで扱い、=== を使う習慣をつけるとバグが減ります。

5. よく使うStringメソッド(初心者が覚えると便利なもの)

  • length — 文字列の長さ(プロパティ)
    let n = "abc".length; // 3
  • charAt(index) — 指定位置の文字を取得
    "abc".charAt(1) // "b"
  • slice(start, end) / substring(start, end) — 部分文字列を取り出す
  • indexOf(sub) / lastIndexOf(sub) — 部分文字列の位置を調べる
  • toLowerCase() / toUpperCase() — 大文字小文字変換
  • trim() — 前後の空白を除く
  • split(separator) — 分割して配列にする
  • replace(pattern, replacement) — 文字列置換(正規表現対応)
let s = "  Hello, JavaScript!  ";
console.log(s.trim().toUpperCase()); // "HELLO, JAVASCRIPT!"
console.log("a,b,c".split(","));     // ["a","b","c"]
JavaScript

6. new String() を使うときの問題点

  • 型が "object" なので === 比較や typeof の期待と違う結果になります。
  • 真偽値チェックで意図しない動作をすることがある:
let o = new String("");
if (o) console.log("truthy"); // 表示される(空文字でもオブジェクトは truthy)
JavaScript

つまり new String("") は空文字でも if の条件では真と扱われます — これは普通の "" と違う振る舞い。

結論:特別な理由がない限り new String() は避ける。

実践的な注意点(まとめ)

  • 文字列比較は基本 ===(厳密比較)を使う。
  • 文字列操作はプリミティブ(リテラル)で行う。
  • 複数行文字列にはテンプレートリテラル(`...`)が便利。
  • 文字列の長さは length、部分取り出しは slice / substring が多用される。
  • 正規表現を使えば高度な検索や置換ができる(中級以降の学習項目)。

練習問題

  • 文字列 "Tokyo 2025" の先頭の 5 文字を取り出して表示しなさい。
    答え例: console.log("Tokyo 2025".slice(0, 5)); // "Tokyo"
  • " apple , banana , cherry " をカンマで分割し、前後の空白を取り除いた配列を作りなさい。
    答え例:
let s = " apple , banana , cherry ";
let arr = s.split(",").map(item => item.trim());
console.log(arr); // ["apple", "banana", "cherry"]
JavaScript
  • new String("hi")"hi"=== で比較するとどうなる? なぜ?
    答え: false。片方はオブジェクト、片方はプリミティブなので型が異なるため。

参考のコツ(初心者が次に学ぶと良いこと)

  • 正規表現(/pattern/)での検索・置換を学ぶと強力。
  • テンプレートリテラル(`Hello ${name}`)で可読性の高い文字列を作る。
  • 文字エンコーディング(UTF-16, 絵文字の取り扱い)は落とし穴があるので中級で学ぶ。
タイトルとURLをコピーしました