文字列の基本 — 作る・つなぐ・数える

文字列の作り方、テンプレートリテラルでの組み立て、length での数え方、そして「一度作った文字列は書き換えられない」という性質までを、実行しながら確かめます。

実行して検証済み処理系Node 22.22.3対応ES1難易度○○○○目安8更新

文字列は、文字を並べたものを1つの値として扱うための型です。 名前、住所、エラーの文言、画面に出す言葉。プログラムが人と接する場所は、たいてい文字列です。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
こんにちは string
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
ダブルクォート シングルクォート バッククォート

3種類の書き方がある

囲む記号は3つあり、どれで囲んでも同じ文字列になります。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
it's 言った: "はい"
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
5 10 0

3つある理由は、中に引用符そのものを書きたいときのためです。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
J S undefined
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
t J undefined

囲んでいる記号と違う記号なら、そのまま書けます。 同じ記号を中に書きたいときは \' のように打ち消せますが、まずは囲みを変えるほうが読みやすくなります。

長さを数える

lengthプロパティで、() を付けません。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
abc
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
TypeError: Cannot assign to read only property '0' of string 'abc'

中身が無い文字列を空文字列と呼びます。長さは0です。 「無い」を表すのに null を使うか空文字列を使うかは別の話なので、ここでは「長さ0の文字列がある」とだけ覚えてください。

length は「見た目の文字数」とは限りません。 絵文字や結合文字では数が合わなくなります。理由と対処は第4回で扱います。

番号で1文字取り出す

配列と同じく、[]添字を書きます。番号は0から始まります。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
Xbc
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
ABC abc

範囲の外を読んでもエラーにはなりませんundefined が返ります。 止まらないので気づきにくい、という点は配列とまったく同じです。

後ろから数えるなら at()

[-1] は使えません。負の番号で取りたいときは at() を使います。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
こんにちは、世界
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
こんにちは、世界 合計 3 件 1 + 2 = 3

一度作った文字列は書き換えられない

ここが配列といちばん違うところです。文字列はイミュータブル、つまりあとから中身を変えられません

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
1行目 2行目
javascript
console.log('3' + 4);
34

代入したのに、何も起きていません。 エラーも出ません。wordabc のままです。

同じコードが、環境によっては止まる

上の実行結果は、sloppy モードという緩い設定のときのものです。 先頭に 'use strict' と書くとstrict モードになり、同じコードが例外になります。

example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
7
example.js
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
null undefined 1,2 [object Object]

どちらもこのページで実際に実行した結果です。 1行足しただけで挙動が変わりました。

この違いは知っておく価値があります。 いまの JavaScript でファイルを import / export で書くと、その中身は自動的に strict モードになります。 つまり実務のコードでは例外になるほうが普通です。黙って無視されるのを当てにしないでください。

変えたいときは「作り直す」

書き換えられないので、新しい文字列を作って入れ直します

toUpperCase() のようなメソッドも、元を書き換えず新しい文字列を返します

元の wordabc のままです。戻り値を受け取らないと、何も起きていないのと同じになります。

つなぐ

+ でつなげます。

値を混ぜるならテンプレートリテラル

バッククォートで囲むと、${} の中に値や式を直接書けます。これをテンプレートリテラルと呼びます。

${} の中にはが書けます。計算もメソッド呼び出しもできます。

改行をそのまま書ける

バッククォートの中では、改行がそのまま改行になります

+\n を並べるより読みやすくなります。

よくある間違い

+ で数と混ぜると足し算にならない

7 にはなりません。 + は片方が文字列だと連結として働くので、4 が文字列に変えられて '34' になります。

数として足したいなら、先に数へ変換します。

ちなみに -* には連結の意味が無いので、'3' * 412 になります。同じ見た目で逆の結果になるので、+ だけ特別だと覚えてください。文字列を数値に変換する

${} に何を入れても文字列になる

オブジェクトを入れると [object Object] になります。 中身を見たいときは ${} に入れず、console.log(obj) のようにそのまま渡してください。 画面に [object Object] が出たら、この取り違えを疑ってください

まとめ

  • 文字列は ' " ` のどれで囲んでも同じ。中に書きたい記号で選ぶ
  • length() を付けない。0文字の空文字列もある
  • 添字は0から。範囲の外はエラーにならず undefined
  • 後ろから取るなら at(-1)
  • 文字列は書き換えられない。 変えたいときは作り直す
  • strict モードでは、書き換えようとすると例外になる
  • 値を混ぜるならテンプレートリテラル+ は数と混ぜると連結になる

次に学ぶ

長い文字列から必要な部分だけ取り出す方法を学びます。 slice()substring() の違い、前後の空白の落とし方、桁を揃える書き方を比べます。

第2回: 文字列を切り出す・整える

この記事の根拠

  1. String Objects — ECMAScript® 2026 Language Specificationtc39.es
  2. Template Literals — ECMAScript® 2026 Language Specificationtc39.es
  3. String — MDNdeveloper.mozilla.org

掲載しているコード例は、公開前に読み手が押したときに動くのと同じもので実行して出力を突き合わせています。結果はリポジトリに残しています。

このページの原文(Markdown)