jsデータタイプ検出の4つの方法

2445 ワード

目次
  • typeof
  • instance of
  • constructor
  • Object.prototype.toString.call()
  • typeof基本データタイプは、Number、String、Boolean、undefinedおよび参照データタイプのFunnctionで、typeof検出データタイプを使用して、それぞれ対応するデータタイプの小文字を返します.また、typeofでコンストラクタを検出して作成したNumber,String,BooleanはすべてObjectの基本データタイプに戻ります.参照データタイプのうち、Aray,Object,Date,RegExp.typeofでは検出できません.小文字のobjectに戻ります.
       typeof '123'     //  string
       typeof 1        //  number
       typeof true     //  boolean
       typeof Symbol('1')   // symbol
       typeof undefined        // undefined
       typeof null     // object
       typeof {a:1,b:2}    // object
       typeof c     //  function
    
    instance ofはtypeofで判断する以外に、instance ofを使用することができます.instance of演算子は、与えられたオブジェクトのプロトタイプチェーン上にプロトタイプがあるかどうかを判断するために使用される特定のタイプを指定する必要があります.基本データタイプはNumber、String、Booleanです.文字の大きさはinstance ofでは検出できませんが、コンストラクタが作成した値は大丈夫です.nullとundefinedがfalseに戻ります.これは彼らのタイプが自分自身なので、Objectが作成したのではなく、falseに戻りました.
    
    console.log(2 instanceof Number); // false
    console.log(true instanceof Boolean);// false 
    console.log('str' instanceof String);// false  
    console.log([] instanceof Array);// true
    console.log(function(){} instanceof Function);// true
    console.log({} instanceof Object);// true    
    // console.log(undefined instanceof Undefined);
    // console.log(null instanceof Null);
    
    constructor constructorはprototypeオブジェクト上の属性であり、構造関数を指します.例示的なオブジェクトに従って属性を探す順序は、インスタンスオブジェクトに例示的な属性または方法がない場合は、プロトタイプチェーン上で探すため、インスタンスオブジェクトもconstrutor属性を使用することができる.undefinedとnull以外のタイプは、constructor属性でタイプを判断できます.
    console.log((2).constructor === Number);
    console.log((true).constructor === Boolean);
    console.log(('str').constructor === String);
    console.log(([]).constructor === Array);
    console.log((function() {}).constructor === Function);
    console.log(({}).constructor === Object);
    
    Object.prototype.toString.call()は、toString()によって各オブジェクトの種類を取得することができる.各オブジェクトがObject.prototype.toString()によって検出されるためには、Function.prototype.call()またはFunction.prototype.apply()の形で呼び出す必要があり、検査対象を伝達する最初のパラメータとして、thisArgと呼ぶ.このように、Object.prototype.toString.call()の方式を使って変数のタイプを判断するのが最も正確な方法であることが見られます.
    var a = Object.prototype.toString;
     
    console.log(a.call(2));
    console.log(a.call(true));
    console.log(a.call('str'));
    console.log(a.call([]));
    console.log(a.call(function(){}));
    console.log(a.call({}));
    console.log(a.call(undefined));
    console.log(a.call(null));