in 演算子の利用 - JavaScript

JavaScript での in演算子について紹介します。

オブジェクトでの in 演算子の利用

オブジェクトでin演算子を利用すると、オブジェクトにフィールド(メンバ変数)が存在するか判定できます。

プログラム例

下記のHTMLファイルを作成します。

コード

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
      function exec() {
        var data = new Object();
        data.id = 10;
        data.name = "ぺんぎんクッキー";
        data.price = 150;
        data.code = "PK-01";

        var elem = document.getElementById("output");
        var fieldname = "price";
        if (fieldname in data == true) {
          elem.innerText = "data に " + fieldname + " フィールドは存在します。";
        } else {
          elem.innerText = "data に " + fieldname + " フィールドは存在しません。";
        }
      }
    </script>
</head>
<body>
  <input type="button" value="Exec" onclick="exec();" />
  <div id="output">出力</div>
</body>
</html>

解説

下記コードによりオブジェクトの作成とメンバ値の代入を実施します。
  var data = new Object();
  data.id = 10;
  data.name = "ぺんぎんクッキー";
  data.price = 150;
  data.code = "PK-01";

fieldname 変数に代入された値のフィールド(メンバ)がオブジェとに存在するかを in 演算子で確認します。今回のコードでは、"price"メンバがオブジェクトに存在するかを確認するコードになっており、先のオブジェクトの初期化の部分で price メンバへの値の代入をしているため、 in 演算の結果は true となり、出力エリアに「data に price フィールドは存在します。」のメッセージが表示されます。
  var elem = document.getElementById("output");
  var fieldname = "price";
  if (fieldname in data == true) {
    elem.innerText = "data に " + fieldname + " フィールドは存在します。";
  } else {
    elem.innerText = "data に " + fieldname + " フィールドは存在しません。";
  }

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


[Exec]ボタンをクリックします。「data に price フィールドは存在します。」のメッセージが表示されます。

結果が false になる例

先のHTMLファイルのexec 関数部分を下記のコードに変更します。
var fieldname = "price";
var fieldname = "detail";
に変更したものになります。detail メンバは data オブジェクトには用意していませんので、in演算の結果はfalseとなります。

  function exec() {
    var data = new Object();
    data.id = 10;
    data.name = "ぺんぎんクッキー";
    data.price = 150;
    data.code = "PK-01";

    var elem = document.getElementById("output");
    var fieldname = "detail";
    if (fieldname in data == true) {
      elem.innerText = "data に " + fieldname + " フィールドは存在します。";
    } else {
      elem.innerText = "data に " + fieldname + " フィールドは存在しません。";
    }
  }

変更したHTMLファイルをWebブラウザで表示します。


[Exec]ボタンをクリックします。「data に detail フィールドは存在しません。」のメッセージが表示されます。

配列での in 演算子の利用

配列でin演算子を利用すると、指定した位置の配列の要素が有効か無効(=undefined)化を判定できます。

プログラム例

下記のHTMLファイルを作成します。

コード

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
      function exec() {
        var data = new Array("Penguin", "Duck", "Pigion", "Owl", "Hawk");

        var elem = document.getElementById("output");
        if (2 in data == true) {
          elem.innerText = "2番目の要素は有効です。";
        } else {
          elem.innerText = "2番目の要素は無効です。";
        }
      }
  </script>
</head>
<body>
  <input type="button" value="Exec" onclick="exec();"/>
  <div id="output">出力</div>
</body>
</html>

解説

下記コードにより配列の初期化と値の代入を実施します。
  var data = new Array("Penguin", "Duck", "Pigion", "Owl", "Hawk");

配列data の2番目の要素を in演算子を用いて有効か判定します。今回のコードでは配列作成後、特に処理をしていないため2番目の配列は有効であり、"2 in data" の式の結果はtrueとなり、画面には「2番目の要素は有効です。」の文字列が表示されます。
  var elem = document.getElementById("output");
  if (2 in data == true) {
    elem.innerText = "2番目の要素は有効です。";
  } else {
    elem.innerText = "2番目の要素は無効です。";
  }

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


[Exec]ボタンをクリックします。画面の出力欄に「2番目の要素は有効です。」のメッセージが表示されます。

要素が無効になる場合のコード

先のHTMLファイルを下記のコードに変更します。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script type="text/javascript">
      function exec() {
        var data = new Array("Penguin", "Duck", "Pigion", "Owl", "Hawk");
        delete data[2];

        var elem = document.getElementById("output");
        if (2 in data == true) {
          elem.innerText = "2番目の要素は有効です。";
        } else {
          elem.innerText = "2番目の要素は無効です。";
        }
      }
  </script>
</head>
<body>
  <input type="button" value="Exec" onclick="exec();"/>
  <div id="output">出力</div>
</body>
</html>

解説

変更点は下記のexec関数内に要素を削除するコードの追加になります。
  function exec() {
    var data = new Array("Penguin", "Duck", "Pigion", "Owl", "Hawk");
    delete data[2];

    var elem = document.getElementById("output");
    if (2 in data == true) {
      elem.innerText = "2番目の要素は有効です。";
    } else {
      elem.innerText = "2番目の要素は無効です。";
    }
  }

下記のコードにより、data配列の2の要素(3番目)を削除しています。deleteによる削除では要素が詰められることはなく、配列の長さは削除前後では変わりません。ただしdata[2]の要素は削除されているため、data[2]はundefined になります。
  delete data[2];

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


[Exec]ボタンをクリックします。delete コマンドでdata[2]が削除されているため、出力欄に「2番目の要素は無効です。」のメッセージが表示されます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2017-11-14
作成日: 2017-08-18
iPentec all rights reserverd.