組み込み関数

JavaScriptのincludes()入門|配列や文字列に要素が含まれるか判定する

includes()は、配列や文字列に特定の値が含まれているかを判定するメソッドです。戻り値はtrueまたはfalseで、indexOf()よりも直感的に使えます。条件分岐やバリデーションで頻繁に活用される基本メソッドです。

基本的な使い方

includes()は検索する値を引数に取り、配列(または文字列)に含まれていればtrue、含まれていなければfalseを返します。

JavaScript
// 配列でのincludes()
const fruits = ["りんご", "バナナ", "みかん", "いちご"];

console.log(fruits.includes("バナナ"));
console.log(fruits.includes("ぶどう"));

// 文字列でのincludes()
const message = "JavaScriptは楽しい言語です";
console.log(message.includes("楽しい"));
console.log(message.includes("難しい"));
実行結果
true
false
true
false

第2引数に検索開始位置(インデックス)を指定できます。配列の特定の範囲だけを検索したい場合に便利です。

JavaScript
const numbers = [1, 2, 3, 4, 5, 3, 6];

// インデックス0から検索(デフォルト)
console.log(numbers.includes(3));

// インデックス4から検索
console.log(numbers.includes(3, 4));

// インデックス6から検索
console.log(numbers.includes(3, 6));
実行結果
true
true
false

indexOf()との違い

includes()indexOf()は似ていますが、重要な違いがあります。NaNの扱いと、戻り値の型が異なります。

JavaScript
// NaNの扱い
const values = [1, 2, NaN, 4];

// includes()はNaNを正しく検出できる
console.log(values.includes(NaN));

// indexOf()はNaNを検出できない
console.log(values.indexOf(NaN));

// 戻り値の違い
const arr = ["a", "b", "c"];

// includes() -> boolean
console.log(arr.includes("b"));   // true/false

// indexOf() -> インデックス番号(-1は見つからない)
console.log(arr.indexOf("b"));    // 数値

// 条件分岐での比較
// includes()の方がシンプル
if (arr.includes("b")) {
  console.log("includes: 見つかった");
}

// indexOf()は-1との比較が必要
if (arr.indexOf("b") !== -1) {
  console.log("indexOf: 見つかった");
}
実行結果
true
-1
true
1
includes: 見つかった
indexOf: 見つかった

実践的な活用例

includes()はホワイトリスト/ブラックリストチェックや、条件分岐の簡潔化に非常に便利です。

JavaScript
// 許可された拡張子のチェック
const allowedExtensions = [".jpg", ".png", ".gif", ".webp"];
const fileName = "photo.png";
const ext = "." + fileName.split(".").pop();

if (allowedExtensions.includes(ext)) {
  console.log(`${fileName} はアップロード可能です`);
}

// 複数条件の簡潔な書き方
const userRole = "editor";

// if文の羅列を避けられる
if (["admin", "editor", "moderator"].includes(userRole)) {
  console.log("編集権限があります");
}

// filter()との組み合わせ
const allItems = ["りんご", "バナナ", "にんじん", "みかん", "キャベツ"];
const fruitList = ["りんご", "バナナ", "みかん", "いちご"];

const fruitsOnly = allItems.filter(item => fruitList.includes(item));
console.log("果物:", fruitsOnly);

const nonFruits = allItems.filter(item => !fruitList.includes(item));
console.log("果物以外:", nonFruits);
実行結果
photo.png はアップロード可能です
編集権限があります
果物: ["りんご", "バナナ", "みかん"]
果物以外: ["にんじん", "キャベツ"]
厳密等価比較(===)を使用

includes()は内部で厳密等価比較(===)を使用します。そのため[1, 2, 3].includes("1")falseになります。型の不一致に注意してください。ただし例外としてNaN === NaNfalseですが、includes(NaN)trueを返します。

オブジェクトの比較に注意

includes()はオブジェクトの参照を比較するため、同じ内容のオブジェクトでも別の参照ならfalseになります。[{a:1}].includes({a:1})falseです。オブジェクトの内容で検索したい場合はfind()some()を使ってください。

まとめ

  • includes()は値が含まれるかをtrue/falseで返す
  • 配列と文字列の両方で使用可能
  • indexOf()と違い、NaNを正しく検出できる
  • ホワイトリストチェックや複数条件の簡潔化に便利
  • オブジェクトは参照比較のため、内容の比較にはsome()を使う