【JavaScript入門】特殊な演算子

 JavaScript には、値を計算したり型を判別したりする演算子が多数ありますが、その中でも少し変わった性質をもつものがいくつか存在します。ここでは、deletetypeofin、そして instanceof と呼ばれる特殊な演算子をまとめて紹介します。各演算子の特徴や使い方を把握しておくと、デバッグやメタ情報の取得などで便利に活用できます。

1.delete 演算子

 delete は、オブジェクトから指定したプロパティを削除するための演算子です。削除の成否を true/false で返しますが、実際の削除が可能かどうかは該当プロパティの属性によって左右される場合があります。

ポイント

 配列の要素を delete すると、要素が削除されて穴(empty)が残るため、一般には配列の要素除去には splice() などのメソッドを使うのが望ましいです。

2.typeof 演算子

 typeof は、引数となる値(式や変数など)の型を文字列で返します。以下のように、数値なら "number", 文字列なら "string", 関数なら "function" などが返されます。ただし、null は歴史的経緯から "object" と判別されるので注意が必要です。

3.in 演算子

 "プロパティ名" in オブジェクト名 の形式で書き、指定したプロパティがオブジェクトに存在するかどうかを true/false で返します。プロパティの存在有無を判定したい場合に有用です。

4.instanceof 演算子

 オブジェクト instanceof コンストラクター の形式で書き、あるオブジェクトが特定のコンストラクターのインスタンスであるかを判定します。継承関係も考慮されるため、[]Array だけでなく Object のインスタンスでもあるため true が返ります。

5.サンプルコード(HTML + JavaScript)

 次の例を「mySpecialOperators.html」というファイル名で保存し、ブラウザで開いて開発者ツールのコンソールをチェックしてください。

【mySpecialOperators.html】

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>mySpecialOperators.html</title>
</head>
<body>
  <h1>特殊な演算子のサンプル</h1>
  <p>ブラウザの開発者ツール(コンソール)で結果を確認してください。</p>

  <script>
    // 1. delete 演算子
    const myMenu = { coffee: '450円', cake: '600円', pasta: '850円' };
    console.log('削除前:', myMenu);

    delete myMenu.cake;
    console.log('ケーキを削除した後:', myMenu);

    // 2. typeof 演算子
    console.log('typeof 99:', typeof 99);
    console.log('typeof "紅茶":', typeof "紅茶");
    console.log('typeof true:', typeof true);
    console.log('typeof undefined:', typeof undefined);
    console.log('typeof null:', typeof null); // "object"と判定される
    console.log('typeof function():', typeof function() {});
    console.log('typeof [1,2,3]:', typeof [1,2,3]);
    console.log('typeof {x:10}:', typeof {x:10});

    // 3. in 演算子
    console.log('"coffee" in myMenu:', 'coffee' in myMenu);
    console.log('"cake" in myMenu:', 'cake' in myMenu);

    // 4. instanceof 演算子
    console.log('[] instanceof Array:', [] instanceof Array);
    console.log('[] instanceof Object:', [] instanceof Object);
    console.log('{} instanceof Array:', {} instanceof Array);
    console.log('{} instanceof Object:', {} instanceof Object);
  </script>
</body>
</html>

実行結果

デバッグコンソールの出力

削除前: {coffee: "450円", cake: "600円", pasta: "850円"}
ケーキを削除した後: {coffee: "450円", pasta: "850円"}
typeof 99: number
typeof "紅茶": string
typeof true: boolean
typeof undefined: undefined
typeof null: object
typeof function(): function
typeof [1,2,3]: object
typeof {x:10}: object
"coffee" in myMenu: true
"cake" in myMenu: false
[] instanceof Array: true
[] instanceof Object: true
{} instanceof Array: false
{} instanceof Object: true

まとめ

  • delete : オブジェクトのプロパティを削除する演算子。
  • typeof : 引数となる値の型を判定して文字列を返す。
  • in : オブジェクトが指定のプロパティを持っているかどうかを調べる。
  • instanceof : オブジェクトが指定のコンストラクターのインスタンスであるかどうかを調べる。

 これらの演算子は普段のロジック処理ではあまり目立ちませんが、適宜使いこなすことで、コードをより柔軟かつ明確に書けるようになります。特にデバッグや型チェック、オブジェクト構造の判断などで強い味方となるでしょう。