1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptの「オブジェクト」「リテラル」「インスタンス」「new」を学び直した。

Posted at

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;   // ✅ 安全・簡潔!

✏️判断のポイントまとめ

  1. リテラルで書ける? → YES → リテラルでOK!
    NO
  2. 状態を持つ必要あり?(例:日付、Map) → YESnew を使う
  3. 静的メソッドだけ使う?(例:Math, JSON) → new 不要

✨ まとめ:JavaScriptでは「シンプル」が正解!

JavaScriptでは、余計なインスタンス化をせず、シンプルなリテラルを使うことが基本です。
そのほうが安全・可読性が高く、パフォーマンスにも優れています。

「なんとなく使っていた new は、本当に必要だったのか?」と問い直し、理解を深める一歩になりました。

この記事が、コードの書き方や設計を見直すヒントになれば嬉しいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?