JavaScript データは、単純データと複雑データの 2 種類に分類されます。単純なデータには、数値、文字列、ブール値、未定義、null の 5 つのタイプが含まれます。複合データのタイプはオブジェクトの 1 つだけです。 [Li Zhan 先生に感謝します。<
> は非常に表現力豊かで印象的です]
2. JavaScript データ型の検出
1。
まず、typeof を通じて単純なデータ型を取得する方法をテストしてみましょう。何も言わずに、コードが重要です:
/ / 変数 obj のデータ型を取得します。
function getType(obj) {
return typeof (obj)
}
/*Constant get type*/
alert(getType) (1)); //数値
alert(getType("jeff wong")); //文字列
alert(getType(true)); //未定義
alert(getType(null)); //オブジェクト
/*変数の型を取得します*/
var str = "ジェフ ウォン";フラグ = true;
var hell = 未定義;
var none = null
alert(getType(str)); >alert(getType( flag)); //boolean
alert(getType(hell)) //未定義
alert(getType(none)); //オブジェクト
このように、typeof 演算子を使用すると、最初の 4 つの単純なデータ型は完全に想定されていますが、typeof null はオブジェクトを返します。 null 型の唯一の値は null ですが、null はオブジェクトではなく、null 値を持つ変数はオブジェクトではないため、typeof を通じて直接 null 型を正しく取得できないことに注意してください。 単純なデータ型を正しく取得するには、getType にいくつかの改善を追加するだけです。
コードをコピー
次は複雑ですデータ型オブジェクト:
コードをコピー
//何らかの処理を行います }
// 変数 obj のデータ型を取得します
function getType(obj) {
return (obj === null) ? "null" : typeof (obj);
var obj = new Object(); //object
var func = new Function();
alert(getType(func)); //function
var str = new String("jeff wong");
alert(getType(str)) ; // オブジェクト
var num = new Number(10);
alert(getType(num)); // object
var time = new Date(); ); / /オブジェクト
var arr = new Array();
alert(getType(arr)); //object
var reg = new RegExp(); ); / /object
var garfield = new Cat();
alert(getType(garfield)); //object
関数を除く返される関数は、Object、String、Date などの JavaScript の一般的な組み込みオブジェクトであっても、カスタム関数であっても、typeof によって返されるすべてのオブジェクトは例外なくすべてのオブジェクトです。しかし、カスタム関数の場合は、その「本当の顔」(この例では、オブジェクトではなく Cat) を取得することを好みます。そして明らかに、typeof にはこの変換処理機能がありません。
2. コンストラクター、大声で愛していると言いたいです
ユニバーサル typeof には解決策がない場合があるため、変数がカスタム関数インスタンスであるかどうかをどのように判断すればよいでしょうか? JavaScript のすべてのオブジェクトにはコンストラクター属性があることがわかっています。この属性は、特にカスタム関数の場合、オブジェクトのデータ型を決定するのに役立ちます。
コピー コード
コードは次のとおりです:
コードをコピー
コードは次のとおりです:
//alert(1.constructor); //数値定数エラー
var num = 1; //true
alert("ジェフ ウォン".constructor == String); //true
var str = "ジェフ ウォン";
alert(str.constructor == String); //true = null;
alert(obj.constructor); //null にはコンストラクター属性がありません
none = unknown;
alert(obj.constructor); //未定義にはコンストラクター属性がありません
実験の結果、数値定数、null および未定義にはコンストラクター属性がないことがわかりました。
この時点で、あなたはルー・ジューのように幸せになり、ついに終わったと思いますか?次のコードもインスピレーションと発掘に役立つかもしれません:
function Animal() { }
function Cat() {
}
Cat.prototype = new Animal();
Cat.prototype.CatchMouse = function () {
/ /何かをします
}
var obj = new Cat();
alert(obj.constructor == Cat); //false? ?
alert(obj.constructor == Animal); //本当の理解
プロトタイプチェーンの継承の場合、コンストラクターはそれほど使いにくいことがわかりました。何をするか?
3. 直感的なインスタンスオブ
ねえ、instanceof を堂々と登場させてください。名前から判断すると、特定のオブジェクトのインスタンスを取得することのようですが、これが正しい理解方法なのかわかりません。とにかく、上記のコードを改善して、最初にテストしてみましょう:
function Animal() { }
function Cat() {
}
Cat.prototype = new Animal();
Cat.prototype.CatchMouse = function () {
//何かをします
}
var garfield = new Cat();
alert(garfieldinstanceofCat) //間違いなく true
alert(garfieldinstanceofAnimal); true わかります
JavaScript のデータ型検出については、Louzhu がここにまとめています。心ある人がもっと追加してくれることを願っています。