typeofとinstance of
5160 ワード
JavaScriptのtypeofとinstance ofは、変数が空かどうかを判断するためによく使われます.しかし、それらの間には違いがあります.
typeof
typeofは1元演算で、1つの演算数の前に置くと、演算数は任意の種類であります.
この戻り値は演算数の種類を示す文字列です.typeofは普通次のような結果しか返ってこないです.
number、bootlean、string、function、object、undefined.私たちはtypeofを使用して、if(typeof a)=「undefined」のような変数が存在するかどうかを取得します.alert(「ok」)」の代わりに、if(a)を使用しないでください.aが存在しないとエラーが発生しますので、Aray、Nullなどの特殊なオブジェクトに対してtype ofを使ってすべてobjectに戻ります.これはtypeofの限界です.
文字列タイプの場合、typeofはstringを返します.例えば、typeof(123)が返した値はstringです. 三、ブールタイプに対して、typeofが返した値はブーメランです.たとえばtypeof(true)が返した値はboleanです.四、オブジェクト、配列、nullに対して返した値は、objectです.例えばtypeof(window)、typeof(document)、typeof(null)が返した値はすべてobjectです.五、関数の種類に対して、戻り値はfunctionです.例えば、typeof(eval)、typeof(Date)の戻り値は、いずれもfunctionです.六、演算数が定義されていない場合(例えば、存在しない変数、関数またはundefined)は、undefinedに戻ります.例えば、typeof(ss)、typeof(undefined)はundefinedに戻ります.( 注意:初期化されていない、未宣言 typoefはundefinedに戻ります.
オブジェクトが配列であるかどうかを取得したい場合、または変数がオブジェクトであるかを判断する場合は、instance ofを選択します.
instance of演算子は、typeof演算子を使用する際に参照タイプの記憶値を使用すると問題が発生します.参照の種類に関係なく、オブジェクトは「object」に戻ります.ECMAScriptは他のJava演算子instance ofを導入してこの問題を解決します.
instance of演算子は、処理中のオブジェクトの種類を識別するために、typeof演算子と似ています.typeofメソッドとは違って、instancentofメソッドは、開発者に特定のタイプのオブジェクトを明確に確認するよう要求します.たとえば:
var oString Object=new String(「ハローワールド」);alert(oString Object instance of String); //「true」を出力するこのコードは「変数oStrigObjectはStringオブジェクトの例ですか?」と聞きました.typeofメソッドのように柔軟ではないが、typeofメソッドが「object」に戻る場合には、instance ofメソッドが有用である.
1、対象のobjはnew Costructorによって作成されました. obj instance of Costructor trueのために
1
2
3
4
5
6
2、継承関係があるなら、 サブクラスインスタンスinstance of親クラス trueにも戻ります
1
2
3
4
5
6
3、Objectはルートであるため、他のカスタムクラスはすべてそれに継承されています. 任意のコンストラクタの例instance of Object すべてtrueに戻ります
1
2
3
4
5
6
7
8
9
1
2
3
4
4、すべてのコンストラクタinstance of Function trueに戻る
1
2
3
4
以上の4つのポイントをまとめて、あるインスタンスがあるクラスまたはそのサブクラスを通じて作成された場合、instance ofはtrueに戻ります.あるいはある構造関数のプロトタイプがオブジェクトobjの内部プロトタイプチェーン上に存在すると、trueに戻ります.つまりinstance ofの結果は、コンストラクタ自体と直接関係がありません.これは多くの言語で通用します.
JSの動的言語特性により、運転時にプロトタイプを修正することができますので、次のfalseに戻るのも珍しくありません.A.prototypeはすでにaの内部原型チェーンにないため、チェーンが中断されました.
1
2
3
4
typeof
typeofは1元演算で、1つの演算数の前に置くと、演算数は任意の種類であります.
この戻り値は演算数の種類を示す文字列です.typeofは普通次のような結果しか返ってこないです.
number、bootlean、string、function、object、undefined.私たちはtypeofを使用して、if(typeof a)=「undefined」のような変数が存在するかどうかを取得します.alert(「ok」)」の代わりに、if(a)を使用しないでください.aが存在しないとエラーが発生しますので、Aray、Nullなどの特殊なオブジェクトに対してtype ofを使ってすべてobjectに戻ります.これはtypeofの限界です.
文字列タイプの場合、typeofはstringを返します.例えば、typeof(123)が返した値はstringです. 三、ブールタイプに対して、typeofが返した値はブーメランです.たとえばtypeof(true)が返した値はboleanです.四、オブジェクト、配列、nullに対して返した値は、objectです.例えばtypeof(window)、typeof(document)、typeof(null)が返した値はすべてobjectです.五、関数の種類に対して、戻り値はfunctionです.例えば、typeof(eval)、typeof(Date)の戻り値は、いずれもfunctionです.六、演算数が定義されていない場合(例えば、存在しない変数、関数またはundefined)は、undefinedに戻ります.例えば、typeof(ss)、typeof(undefined)はundefinedに戻ります.( 注意:初期化されていない、未宣言 typoefはundefinedに戻ります.
オブジェクトが配列であるかどうかを取得したい場合、または変数がオブジェクトであるかを判断する場合は、instance ofを選択します.
instance of演算子は、typeof演算子を使用する際に参照タイプの記憶値を使用すると問題が発生します.参照の種類に関係なく、オブジェクトは「object」に戻ります.ECMAScriptは他のJava演算子instance ofを導入してこの問題を解決します.
instance of演算子は、処理中のオブジェクトの種類を識別するために、typeof演算子と似ています.typeofメソッドとは違って、instancentofメソッドは、開発者に特定のタイプのオブジェクトを明確に確認するよう要求します.たとえば:
var oString Object=new String(「ハローワールド」);alert(oString Object instance of String); //「true」を出力するこのコードは「変数oStrigObjectはStringオブジェクトの例ですか?」と聞きました.typeofメソッドのように柔軟ではないが、typeofメソッドが「object」に戻る場合には、instance ofメソッドが有用である.
1、対象のobjはnew Costructorによって作成されました. obj instance of Costructor trueのために
1
2
3
4
5
6
function
Person(n, a) {
this
.name = n;
this
.age = a;
}
var
p =
new
Person(
'John Backus'
, 82);
console.log(p
instanceof
Person);
// true
2、継承関係があるなら、 サブクラスインスタンスinstance of親クラス trueにも戻ります
1
2
3
4
5
6
function
A(){}
function
B(){}
B.prototype =
new
A();
// B A
var
b =
new
B();
console.log(b
instanceof
A);
// true
3、Objectはルートであるため、他のカスタムクラスはすべてそれに継承されています. 任意のコンストラクタの例instance of Object すべてtrueに戻ります
1
2
3
4
5
6
7
8
9
function
A() {}
var
a =
new
A();
console.log(a
instanceof
Object);
// true
var
str =
new
String(
'hello'
);
console.log(str
instanceof
Object);
// true
var
num =
new
Number(1);
console.log(num
instanceof
Object);
// true
コンストラクタ自体も含まれています.1
2
3
4
function
A() {}
console.log(A
instanceof
Object);
// true
console.log(String
instanceof
Object);
// true
console.log(Number
instanceof
Object);
// true
4、すべてのコンストラクタinstance of Function trueに戻る
1
2
3
4
function
A() {}
console.log(A
instanceof
Function);
// true
console.log(String
instanceof
Function);
// true
console.log(Number
instanceof
Function);
// true
以上の4つのポイントをまとめて、あるインスタンスがあるクラスまたはそのサブクラスを通じて作成された場合、instance ofはtrueに戻ります.あるいはある構造関数のプロトタイプがオブジェクトobjの内部プロトタイプチェーン上に存在すると、trueに戻ります.つまりinstance ofの結果は、コンストラクタ自体と直接関係がありません.これは多くの言語で通用します.
//
function
A(){}
function
B(){}
A.prototype = B.prototype = {a: 1};
//
var
a =
new
A();
var
b =
new
B();
console.log(a
instanceof
B);
// true
console.log(b
instanceof
A);
// true
aを見ましたが、bはAとBで作成されましたが、a instance of Bと b instance of Aは全部trueです.つまり、aはコンストラクタBで作成されたものではないが、依然としてtrueに戻る.B.prototypeはaの内部プロトタイプチェーンに存在するためです.JSの動的言語特性により、運転時にプロトタイプを修正することができますので、次のfalseに戻るのも珍しくありません.A.prototypeはすでにaの内部原型チェーンにないため、チェーンが中断されました.
1
2
3
4
function
A(){}
var
a =
new
A();
A.prototype = {};
// , a
console.log(a
instanceof
A);
// false