JavaScript学習を進める中で「リテラルとインスタンスの違いって何?」「new はいつ使えばいいの?」という初歩的謎が気になり学び直しました。
この記事では、オブジェクトや関数などの基本型に焦点をあてながら、リテラルで良い場合と new が必要なケースの判断基準を、わかりやすく整理してみます。
💡そもそも「オブジェクト」とは?
JavaScriptにおいてオブジェクトとは、複数の値(プロパティ)や処理(メソッド)をひとまとめにしたデータの集合体です。
const car = {
brand: "Toyota", // プロパティ
drive: function() { // メソッド
console.log("Driving...");
}
};
car.drive(); // => Driving...
ここで car
はオブジェクト、brand
はプロパティ、drive
はメソッドといえます。
💡JavaScriptの「リテラル」と「コンストラクタ構文」
JavaScriptでは、同じようなオブジェクトを「リテラル」でも「new(コンストラクタ)」でも書くことができます。
オブジェクトの例:
// リテラル構文(おすすめ)
const obj1 = {};
// コンストラクタ構文(非推奨)
const obj2 = new Object();
どちらも同じ Object を生成しますが、シンプルで読みやすいリテラルの方が推奨されます。
✏️ 主な型と書き方の比較表
データ型 | リテラル表現 | コンストラクタ構文 | 推奨される方法 | 備考 |
---|---|---|---|---|
Object | {} | new Object() | ✅リテラル | 読みやすくて簡潔 |
Array | [] | new Array() | ✅リテラル | newは引数の扱いが微妙 |
String | "abc" | new String("abc") | ❌非推奨 | newはラッパーオブジェクトになる |
Number | 123 | new Number(123) | ❌非推奨 | 同上 |
Boolean | true | new Boolean(true) | ❌非推奨 | 同上 |
Function | function() {} または ()=>{} | new Function(...) | ✅リテラル | newは危険・非推奨 |
Date | なし | new Date() | ✅newを使う | インスタンスが必要 |
RegExp | /abc/ | new RegExp("abc") | 両方OK | 動的なら new |
💡ラッパーオブジェクトに注意!
new String()
のような書き方をすると、「文字列オブジェクト」が生成されてしまい、プリミティブ文字列とは異なる挙動になります。
const str1 = "hello"; // プリミティブ
const str2 = new String("hello"); // オブジェクト
console.log(typeof str1); // => string
console.log(typeof str2); // => object
console.log(str1 === "hello"); // true
console.log(str2 === "hello"); // false ← 注意!
✅ 原則として:
・プリミティブ型はリテラルで使う!
・ラッパーオブジェクトは使わない!
💡new を使うべきケースは?
✅ 使うべきもの
・new Date()
:日時のインスタンスが必要
・new RegExp()
:正規表現を動的に作りたいとき
・new Error()
, new Map()
, new Set()
:明確なインスタンス生成が必要
❌ 避けるべきもの
・new Object()
→ {}
に置き換える
・new Array()
→ []
に置き換える
・new String()
, new Number()
, new Boolean()
→ リテラルで!
💡 Functionコンストラクタは原則NG!
const fn = new Function("a", "b", "return a + b"); // ⚠️ 非推奨
理由:
・セキュリティリスク(コードインジェクションなど)
・デバッグしづらい
・グローバルスコープ依存で予測困難
✅ 書くならこう
const fn = (a, b) => a + b; // ✅ 安全・簡潔!
✏️判断のポイントまとめ
- リテラルで書ける? → YES → リテラルでOK!
↓ NO - 状態を持つ必要あり?(例:日付、
Map
) → YES →new
を使う - 静的メソッドだけ使う?(例:
Math
,JSON
) →new
不要
✨ まとめ:JavaScriptでは「シンプル」が正解!
JavaScriptでは、余計なインスタンス化をせず、シンプルなリテラルを使うことが基本です。
そのほうが安全・可読性が高く、パフォーマンスにも優れています。
「なんとなく使っていた new
は、本当に必要だったのか?」と問い直し、理解を深める一歩になりました。
この記事が、コードの書き方や設計を見直すヒントになれば嬉しいです。