jsにはプリミティブ値が合計5つあり、typeofで判定できるものが6つ、ネイティブの組み込みコンストラクタが9つあります。
これら 569 は、js 言語の基礎を形成します。
5 つのプリミティブ値は次のとおりです: 数値、文字、ブール値、null、未定義
Typeof は、数値、文字、ブール値、オブジェクト、関数、未定義を判断できます。 null と配列、両方の出力オブジェクトの型に注意してください。
typeof は配列とオブジェクトを区別できません。どうやって型を決定するのですか? Object.prototype.toString.apply() を使用します。
if(value&&typeof value ==='object'&&value.constructor === Array)
配列が異なるフレームとウィンドウで作成され、ウィンドウ オブジェクトが異なる場合、上記の検出は false を返します。
信頼できるメソッドは if(Object.prototype.toString.apply(value)==="[object Array]")
引数の配列は配列ではなく、長さのメンバー プロパティを持つ単なるオブジェクトです。
次の例に示すように、引数は通常の array
}
a();//出力 [オブジェクトの引数]
}
a();//出力 [オブジェクト配列]
instanceof はインスタンスであるかどうかをどのように判断しますか?
プロトタイプの属性にはコンストラクターが含まれます。
デフォルトのプロトタイプ属性は object オブジェクトであり、元の値を無視して任意の複雑な値に設定できます。
これはオブジェクトですが特別であり、循環チェーンは各インスタンスをそのコンストラクターのプロトタイプ属性にリンクします。インスタンスとコンストラクターのプロトタイプ プロパティ (インスタンスの __proto__) の間には、隠されたリンクがあります。同時に、インスタンスのコンストラクター属性は、コンストラクター プロトタイプのコンストラクターを通じて取得されます。
ただし、コンストラクターは保持しておくと、新しいインスタンスがコンストラクターの属性を持ち、instanceof を使用して判断することもできます。
Foo.prototype={constructor:Foo}
var FooInstance = new Foo;
FooInstance.__proto__=== Foo.prototype;//true
FooInstance.constructor === Foo
実際には、次の例に示すように、instanceof の判断はコンストラクターではなく、プロトタイプ チェーンに基づいています。
コンストラクターは使用せず、プリミティブ値を使用します
どの値が false とみなされるか: false、""、null、0、-0、NaN、未定義、これらは false とみなされ、その他は true
ただし、次の例に注意してください