JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのinstanceof演算子の使い方と注意点

instanceof演算子とは

instanceof演算子は、コンストラクタのprototypeプロパティが、あるオブジェクトのプロトタイプチェーン上のどこかに存在するかどうかを判定します。よりシンプルに言えば、「ある変数が特定の型であるか」をチェックするための演算子です。ただし、いくつか注意点があるため、具体例を見ながら確認していきましょう。

プリミティブ値の場合

文字列や数値はオブジェクトではなくプリミティブ値であり、内部プロトタイプ([[Prototype]])を持ちません。そのため、instanceofが正しく機能するのは、それらをNumberStringなどのラッパーオブジェクトで包んだ場合だけです。

コード例

console.log(1 instanceof Number)
console.log(new Number(1) instanceof Number)
console.log("" instanceof String)
console.log(new String("") instanceof String)

出力結果

false
true
false
true

リテラルで作成したプリミティブ値にはfalseが返され、newで生成したラッパーオブジェクトのみtrueになることがわかります。

コンストラクタ関数の場合

オブジェクトを返すコンストラクタ関数(JavaScriptのクラスを含む)から生成したインスタンスも、instanceof演算子で型をチェックできます。

コード例

function Person(name) {
    this.name = name
}
let john = new Person("John");
console.log(john instanceof Person)

出力結果

true

継承関係の場合

JavaScriptはプロトタイプベースの継承をサポートしています。そのため、継承階層内のどのクラスに対してinstanceofを実行しても、trueが返されます。

コード例

class Person {}
class Student extends Person {
    constructor(name) {
        super()
        this.name = name
    }
}
let john = new Student("John");
console.log(john instanceof Person)
console.log(john instanceof Student)

出力結果

true
true

このように、Studentのインスタンスは親クラスであるPersonに対してもtrueとなります。instanceofは継承チェーン全体を考慮した型チェックを行うため、クラス階層を扱う際に特に有用です。

  1. JavaScriptスプレッド演算子の使い方を徹底解説!配列の展開と結合の基本

    JavaScriptのスプレッド演算子(...)は、配列を個々の要素へと展開できる便利な構文です。使い方は非常にシンプルで、配列名の前にドット3つ(...)を記述するだけです。 スプレッド演算子の基本構文 [...配列名] この構文により、配列の中身が個別の要素として展開されます。代表的な活用場面は以下の通りです。 複数の配列を結合して、新しい配列を作成する 既存の配列のコピー(シャローコピー)を作る 関数を呼び出す際に、配列の各要素を引数として渡す 実装例:2つの配列をスプレッド演算子で結合する 次のサンプルコードでは、数値の配列 arr1 と文字列の配列 arr2 をスプレッド演算

  2. JavaScriptのグループ化演算子とは?優先順位の制御方法をサンプルコードで解説

    グループ化演算子とはJavaScriptのグループ化演算子は、丸括弧「()」で表され、式を評価する際の優先順位を制御するために使用されます。通常、演算子にはあらかじめ決められた優先順位があり、乗算(*)や除算(/)は加算(+)や減算(-)よりも先に評価されます。しかし、グループ化演算子で式を囲むことで、この優先順位を意図的に変更し、囲まれた部分を最優先で計算させることができます。例えば「2+2*5/22」という式の場合、標準の優先順位では乗算・除算が先に実行されますが、丸括弧を使うことで「(2+2)*5/22」のように加算を先に行わせることが可能です。サンプルコード以下は、JavaScript