JavaScript基礎学習-データタイプとデータタイプの検査
2245 ワード
1.JavaScriptのデータタイプ
JavaScriptのデータタイプは2種類に分けられています.元のタイプ、引用のタイプはメモリ内の記憶場所が違います.
元のタイプ
オリジナルタイプも基本タイプと言います.5つの基本タイプのデータがあります.number、string、bollan、null、undefinedです.ES 6にはSymbolも追加されました.元のタイプはメモリスタックに格納されています.つまり直接記憶されている変数の値です.
参照データ
6つのオリジナルタイプを除いて、すべて参照タイプです.主にObject、Aray、Date、Error、RegExp、Functionがあります.ES 6種にはPromise、Mapが追加されました.参照タイプの値はメモリスタックに格納されています.つまり直接記憶する変数の値は元のオブジェクトを指すメモリポインタです.
3.元データの検出
元のタイプを検出する場合は、typeofオペレータで検出できます.typeofを検出すると検出対象の種類を示す文字列が返されます.
typeofを使って元のタイプの検出を行う場合、その戻り値はそれぞれ以下の通りです. Numberタイプは'number' に戻ります. Stringタイプは'string' に戻る. Booleanタイプは'bollan' に戻ります. Udefinedタイプは'undefined' に戻ります. Nullタイプは'null' に戻ります. Symbolタイプは、「smbol」 に戻る.
限定性:行列か正規か、対象の他の値かを具体的に細分化することはできません.対象データの種類に対しては、すべてobjectです.
4.参照データタイプの検出
instance ofメソッド
あるインスタンスがあるクラスに属するかどうかを検出します.
具体的な使い方:[]instance of Aray;/true 限界性
基本データタイプについては、字面量方式で作成された結果とインスタンスが作成された結果とは異なるが、厳密な意味では、インスタンスの作成方式から出た結果が基準の対象データタイプであり、各種の基本データタイプの例でもある.字面量方式で作成された基本データタイプを検出して処理するために使用できない .現在の例のプロトタイプチェーン上でさえあれば、その検出結果はすべてtrue である.クラスのプロトタイプの継承において、私達が検出した結果は必ずしも正確ではない.
コンストラクタ:コンストラクタ(一般的ではない) は、基本データタイプの検出 を処理することができる.
制限性:種類の原型を書き直すことができます.書き直す過程で元の原型を覆い隠すことができるかもしれません.この時に検査が正確ではありません.
Object.prototype.toString.call(val);
最も正確な方法.Object.prototype.toStringの役割は、現在の方法の実行主体(方法中のthis)の属するクラスの詳細情報を返すことです.
具体的な使い方: Object.prototype.toString.call([])/'[object Aray]; は'object Aray'を返します.中かっこの中の一番目の項目はいつも小文字のobjectです.根から言えば、どのタイプのデータも一つのオブジェクトです.第二項は、現在検出されるデータを表し、最初の文字を大文字にしたデータクラスです. String\Boolean\array\RegExp\Date\Functのプロトタイプ上のtoString()メソッドは、ObjectのtoString()メソッドを書き換えており、現在のデータタイプを文字列の種類に変換する役割を果たしています. オブジェクト属性検出
オブジェクト属性を検出する場合は、in演算子、またはオブジェクトの例示的な方法ハスOwnProperty()を使用することができます.前者は、属性がそのオブジェクトに属するかどうかを検出するだけでなく、オブジェクトのプロトタイプチェーン内の方法または属性がそのオブジェクトに属するかを検出することができる.後者はオブジェクトのプライベート属性と方法だけを検出し、プロトタイプチェーン内の属性と方法を判断しない.
事例:
JavaScriptのデータタイプは2種類に分けられています.元のタイプ、引用のタイプはメモリ内の記憶場所が違います.
元のタイプ
オリジナルタイプも基本タイプと言います.5つの基本タイプのデータがあります.number、string、bollan、null、undefinedです.ES 6にはSymbolも追加されました.元のタイプはメモリスタックに格納されています.つまり直接記憶されている変数の値です.
参照データ
6つのオリジナルタイプを除いて、すべて参照タイプです.主にObject、Aray、Date、Error、RegExp、Functionがあります.ES 6種にはPromise、Mapが追加されました.参照タイプの値はメモリスタックに格納されています.つまり直接記憶する変数の値は元のオブジェクトを指すメモリポインタです.
3.元データの検出
元のタイプを検出する場合は、typeofオペレータで検出できます.typeofを検出すると検出対象の種類を示す文字列が返されます.
typeofを使って元のタイプの検出を行う場合、その戻り値はそれぞれ以下の通りです.
限定性:行列か正規か、対象の他の値かを具体的に細分化することはできません.対象データの種類に対しては、すべてobjectです.
4.参照データタイプの検出
instance ofメソッド
あるインスタンスがあるクラスに属するかどうかを検出します.
具体的な使い方:
基本データタイプについては、字面量方式で作成された結果とインスタンスが作成された結果とは異なるが、厳密な意味では、インスタンスの作成方式から出た結果が基準の対象データタイプであり、各種の基本データタイプの例でもある.
コンストラクタ:コンストラクタ(一般的ではない)
制限性:種類の原型を書き直すことができます.書き直す過程で元の原型を覆い隠すことができるかもしれません.この時に検査が正確ではありません.
Object.prototype.toString.call(val);
最も正確な方法.Object.prototype.toStringの役割は、現在の方法の実行主体(方法中のthis)の属するクラスの詳細情報を返すことです.
具体的な使い方:
オブジェクト属性を検出する場合は、in演算子、またはオブジェクトの例示的な方法ハスOwnProperty()を使用することができます.前者は、属性がそのオブジェクトに属するかどうかを検出するだけでなく、オブジェクトのプロトタイプチェーン内の方法または属性がそのオブジェクトに属するかを検出することができる.後者はオブジェクトのプライベート属性と方法だけを検出し、プロトタイプチェーン内の属性と方法を判断しない.
事例:
for(var key in obj){
if(obj.hasOwnProterty(key)){
// 。
}
}
ですから、属性がその対象に属するかどうかを判断する時は、ハスOwnPropertyを使います.