文字列 とは?
- JavaScriptではシングルクォート、ダブルクォート、バッククォート(テンプレートリテラル)で作成できる
- テンプレートリテラル(`Hello, ${name}`)を使うと変数を埋め込んだ文字列が簡単に作れる
- length プロパティで文字数を取得し、slice・includes・replace などのメソッドで操作できる
- 文字列は不変(イミュータブル)で、操作すると元の文字列は変わらず新しい文字列が作られる
シングルクォートとダブルクォートってどっちを使えばいいの?
JavaScriptではどちらでも動作は同じ。チームやプロジェクトで統一するのが大事で、ESLintなどのツールで強制することが多い。変数を埋め込みたいときはバッククォートのテンプレートリテラルが一番便利。
文字列が不変ってどういうこと?
たとえば str.toUpperCase() を呼んでも元の str は変わらない。大文字になった新しい文字列が返ってくる。元を変えたいなら str = str.toUpperCase() のように代入し直す必要がある。
数字と文字列の "123" って何が違うの?
数字の 123 は計算できるけど、文字列の "123" はただのテキスト。"1" + "2" は "12" になる(文字の連結)。型を意識しないとバグの原因になるから、Number() や parseInt() で変換することを覚えておこう。
文字列の比較で == を使っちゃダメなの?
言語による。JavaScriptでは「===」を使うのが推奨(==だと型変換が発生して予想外の結果になる)。Javaでは「==」は参照の比較になるから、文字列の内容を比べるには「.equals()」を使う。Pythonは「==」で内容比較ができるから問題ない。言語ごとの罠を知っておくことが大事だよ。
絵文字を含む文字列って扱いが難しいって聞いたけど?
難しいよ。JavaScriptの「'😀'.length」は2を返す。これは絵文字がUTF-16で2つのサロゲートペアで表されるからなんだ。正確な文字数を数えるには[...'😀'].lengthのようにスプレッド構文を使う。さらに肌の色を変えた絵文字や国旗絵文字はもっと複雑で、複数のコードポイントがZWJ(ゼロ幅接合子)でつながっている。文字列処理は奥が深いんだよ。