JavaScript プリミティブでは、プロトタイプ チェーンがありません。オブジェクトのみが行います。プリミティブ値には次が含まれます。
- ブール値
- 数字
- ストリングス
- ヌル
- 未定義
したがってisPrototypeOf
、プリミティブ値で呼び出すと、常に が返されfalse
ます。
ブール値、数値、または文字列をオブジェクトとして使用しようとすると、JavaScript によって自動的にオブジェクトに変換されます。したがって、舞台裏でa.constructor
評価されます。new Number(a).constructor
これが、プリミティブ値をオブジェクトとして使用できる理由です。
プリミティブ値を格納する変数をオブジェクトとして頻繁に使用する場合は、明示的にオブジェクトにすることをお勧めします。たとえば、あなたの場合、a
as として定義する方が良いでしょうnew Number(12)
。利点は次のとおりです。
- JavaScript は、プリミティブをオブジェクトとして使用しようとするたびに、プリミティブをオブジェクトに強制する必要はありません。オブジェクトは 1 回だけ作成します。したがって、パフォーマンス効率が高いです。
- あなたの場合のメソッドは、のインスタンスになるよう
isPrototypeOf
に返さtrue
れます。したがって、プロトタイプチェーンに含まれます。a
Number
Number.prototype