この記事では、JavaScriptのデータ型を検出する方法について説明します。JavaScriptのデータ型を検出する方法を知らない方、またはJavaScriptのデータ型を検出する方法に興味がある方は、一緒に勉強しましょう。この記事を見てください。さて、ナンセンスはやめて本題に入りましょう。
その前に、js には 5 つの基本型と 1 つの複合型があることについて説明します
5 つの基本型: unknown、null、number、string、bollean
1 つの複合型: object
戻り値の型: string
は次のように検出されます:
/*5大基本类型*/ var a = 123; console.log(typeof a == "number"); //true var a = '123'; console.log(typeof a == "string"); //true var a = true; console.log(typeof a == "boolean"); //true var a = undefined; console.log(typeof a == "undefined"); //true var a = null; console.log(a == null); //true /*复杂类型*/ var a = function(){}; console.log(typeof a == "function"); //true
他の参照型オブジェクトの場合、typeofは検出および区別できず、日付型、正規表現型、など、何が検出されているかを区別することができません (検出するには以下の他のメソッドを使用してください)
typeof メソッド関数のカプセル化
function typeOf(obj){ return (obj === 'null') ? 'null' : (typeof obj) }
最後に、特別な NaN
console.log(typeof NaN === "number"); //true
構文: object1 オブジェクト2のインスタンス
パラメータ: object1-オブジェクト、コンストラクター-別のオブジェクト上記の抽象的な言葉をどのように理解すればよいでしょうか?
言い換えれば、
コンストラクターオブジェクトのプロトタイプオブジェクトは、インスタンスオブジェクトのプロトタイプチェーンを通じてアクセスできます。これは、instanceofがオブジェクト自体の構造を気にしないことも示しています。オブジェクトとコンストラクターの関係のみを考慮します。 var a = new Date();
console.log(a instanceof Date); //true
console.log(a instanceof Object); //true
var a = new RegExp('123');
console.log(a instanceof RegExp); //true
console.log(a instanceof Object); //true
var a = function(){};
console.log(a instanceof Function); //true
console.log(a instanceof Object); //true
var a = [];
console.log(a instanceof Array); //true
console.log(a instanceof Object); //true
var a = {};
console.log(a instanceof Object); //true
3. コンストラクター属性
ここで注意すべき点は、通常作成するもの (var a = 1、var b = '123'... など) は、実際には対応するコンストラクターを参照することによって作成されるということです。これらは、目に見えるサーフェスではなく、タイプに対して直接作成されます。
各タイプのテスト方法は次のとおりです:
/*5大基本类型*/ var a = 123; console.log(a.constructor == Number); //true var a = '123'; console.log(a.constructor == String); //true var a = true; console.log(a.constructor == Boolean); //true var a = undefined; console.log(a && a.constructor); //undefined var a = null; console.log(a && a.constructor); //null /*复杂类型*/ var a = function(){}; console.log(a.constructor == Function); //true var a = new Date(); console.log(a.constructor == Date); //true var a = new Object(); console.log(a.constructor == Object); //true var a = {}; console.log(a.constructor == Object); //true var a = new Array(); console.log(a.constructor == Array); //true var a = []; console.log(a.constructor == Array); //true var a = new RegExp('abc'); console.log(a.constructor == RegExp); //true var a = /^abc$/; console.log(a.constructor == RegExp); //true
4.toString()メソッド
/*toString 检测类型函数*/
function toStringType(obj){
return Object.prototype.toString.call(obj).slice(8, -1);
}
/*5大基本类型*/
var a = 123;
console.log(toStringType(a)); //"Number"
var a = '123';
console.log(toStringType(a)); //"String"
var a = true;
console.log(toStringType(a)); //"Boolean"
var a = undefined;
console.log(toStringType(a)); //"Undefined"
var a = null;
console.log(toStringType(a)); //"Null"
/*复杂类型*/
var a = function(){};
console.log(toStringType(a)); //"Function"
var a = new Date();
console.log(toStringType(a)); //"Date"
var a = new Object();
console.log(toStringType(a)); //"Object"
var a = {};
console.log(toStringType(a)); //"Object"
var a = new Array();
console.log(toStringType(a)); //"Array"
var a = [];
console.log(toStringType(a)); //"Array"
var a = new RegExp('abc');
console.log(toStringType(a)); //"RegExp"
var a = /^abc$/;
console.log(toStringType(a)); //"RegExp"
コードは次のとおりです:
function toStringType(obj){ return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase(); }
この時点で疑問があるかもしれません。
var a = 123; console.log(a.toString()); //"123"
1. このように書くと「123」が返されるのはなぜですか?
回答: js 内の各オブジェクトには独自の toString メソッドが事前定義されているため、toString を書き換えるのと似ています
2。なぜこの記事では call メソッドが使用されているのでしょうか。機能は何ですか?
3 に変更します。
var a = 123; console.log(Object.prototype.toString.call(a)); //"[Object Number]"
この例を通して、比較すると分かりますが、結果を直感的に理解するためのものです。
上記がこの記事のすべての内容です。あまり詳しくない場合は、両方をさらに実装することで簡単にマスターできます。
関連する推奨事項:
以上がJavaScriptにおけるデータ型検出方法のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。