「JavaScriptは型がない言語です」
プログラミングを調べると、こんな説明をよく見かけます。
でもその直後にこんなコードも出てきます。
let age = 20;
const name = "くれび";
…え?
let とか const って
型の宣言じゃないの?
実はここに、JavaScript最大の誤解ポイントがあります。
JavaScriptは「型がない」のではない
結論から言うと、
JavaScriptは型がない言語ではありません。
変数に型がない言語です。
この違いがとても大事です。
普通の言語:箱にラベルが貼られている
例えば Java という言語ではこう書きます。
int age = 20;
String name = "くれび";
このとき age は「数値専用の箱」name は「文字専用の箱」になります。
箱の種類が最初から決まっているので、続けて次のように書くと、
プログラムは実行前にエラーとなり、処理は開始されません。
age = "こんにちは"; // エラー
JavaScript:箱にラベルがない
JavaScriptはこうなります。
let x = 10;
x = "こんにちは";
x = true;
同じ x に
数値 → 文字 → 真偽値
全部入ります。
つまり
JavaScriptの変数は「なんでも入る箱」
これが「変数に型がない」という意味です。
でも値には型がある
ここが一番重要です。
typeof 10 // number
typeof "hello" // string
typeof true // boolean
JavaScriptは
変数ではなく、値が型を持つ
言語です。
じゃあ let と const は何?
では最初の疑問に戻ります。
let age = 20;
const name = "くれび";
これは型ではありません。
let と const は「箱の性質」
| 書き方 | 意味 |
|---|---|
| let | 中身を入れ替えられる箱 |
| const | 中身を入れ替えられない箱 |
let:後で変えられる
let score = 0;
score = 100; // OK
const:再代入できない
const score = 0;
score = 100; // エラー
なぜ初心者が混乱するのか
こんなコードを見たことありませんか?
"5" + 1 // "51"
"5" - 1 // 4
同じ「5」なのに結果が違う。
これは
変数ではなく、値の型で動作が決まる
からです。
JavaScriptは書き方ではなく「中身」を見て判断する言語です。
まとめ
- JavaScriptに型はある
- ただし「変数に型がない」
- let / const は型ではない
- 値の型によって動作が変わる
つまり JavaScriptとは
箱ではなく中身を見る言語
ここを理解すると、エラーの意味が一気に読めるようになります。
