JavaScriptにおけるデータ型検出方法のまとめ

韦小宝
リリース: 2018-03-14 18:30:35
オリジナル
1185 人が閲覧しました

この記事では、JavaScriptデータ型を検出する方法について説明します。JavaScriptのデータ型を検出する方法を知らない方、またはJavaScriptのデータ型を検出する方法に興味がある方は、一緒に勉強しましょう。この記事を見てください。さて、ナンセンスはやめて本題に入りましょう。

その前に、js には 5 つの基本型と 1 つの複合型があることについて説明します
5 つの基本型: unknown、null、number、string、bollean
1 つの複合型: object

1.typeof

戻り値の型: 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
ログイン後にコピー

2 を追加します。オブジェクトを検出します 別のオブジェクトのインスタンスですか

構文: object1 オブジェクト2のインスタンス

パラメータ: object1-オブジェクト、コンストラクター-別のオブジェクト


戻り値の型: Boolean

上記の抽象的な言葉をどのように理解すればよいでしょうか?

言い換えれば、

コンストラクター

オブジェクトのプロトタイプオブジェクトは、インスタンスオブジェクトのプロトタイプチェーンを通じてアクセスできます。これは、instanceofがオブジェクト自体の構造を気にしないことも示しています。オブジェクトとコンストラクターの関係のみを考慮します。

ここでは、instanceof について詳しく知りたい場合は、ここをクリックして MDN ドキュメントを参照してください

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()メソッド

このメソッドは、オブジェクトのタイプを検出する最も安全かつ正確な方法です。

戻り値の型: String

/*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 メソッドが使用されているのでしょうか。機能は何ですか?

回答: call の機能はスコープを現在のスコープに変更することです。オブジェクトの実行環境を


3 に変更します。

var a = 123;
console.log(Object.prototype.toString.call(a));  //"[Object Number]"
ログイン後にコピー

この例を通して、比較すると分かりますが、結果を直感的に理解するためのものです。

上記がこの記事のすべての内容です。あまり詳しくない場合は、両方をさらに実装することで簡単にマスターできます。



関連する推奨事項:

PHPのデータ型検出例の詳細な説明

JavaScriptでのデータ型検出方法のまとめ

以上がJavaScriptにおけるデータ型検出方法のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート