jsデータタイプ判断

18149 ワード

この記事はhahahazexiaを参考にしてブログ園で発表したものです.https://www.cnblogs.com/hahazexia/p/8886829.html
1,typeof判断
以下はよく使うタイプの判断です.
console.log(
        typeof 123, //"number"
        typeof 'abc', //"string"
        typeof true, //"boolean"
        typeof [1, 2], //"object"
        typeof {}, //"object"
        typeof function () {}, //"function"
        typeof undefined, //"undefined"
        typeof null, //"object"
        typeof new Date(), //"object"
        typeof /^[a-z]$/, //"object"
        typeof new Error() //"object"
    );
コードの結果は、Function、Boolean、String、Number、Unidefindeを除いて、他の判断はすべてObjectで、比較的に大まかで、正確に判断できない場合は適用されません.
2,instance of
    console.log(
        123 instanceof Number, //false
        'abc' instanceof String, //false
        false instanceof Boolean, //false
        [1, 2, 3] instanceof Array, //true
        {} instanceof Object, //true
        function () { } instanceof Function, //true
        undefined instanceof Object, //false
        null instanceof Object, //false
        new Date() instanceof Date, //true
        /^[a-zA-Z]$/ instanceof RegExp, //true
        new Error() instanceof Error //true
    )
Number、String、Booleanは彼らのタイプを検出していません.この方法は適用されません.null、undefindeは彼らのタイプは自分自身です.
3,constructor
constructorはprototypeオブジェクトの属性で、コンストラクタを指します.例示的なオブジェクトに従って属性を探す順序は、インスタンスオブジェクトに例示的な属性または方法がない場合は、プロトタイプチェーン上で探すため、インスタンスオブジェクトもconstrutor属性を使用することができる.
console.log(new Number(123).constructor)
//ƒ Number() { [native code] }
Numberの構造関数を指すことが見られますので、num.co nstructor==Numberを使って、変数がNumberタイプかどうかを判断できます.
var num  = 123;
var str  = 'abcdef';
var bool = true;
var arr  = [1, 2, 3, 4];
var json = {name:'wenzi', age:25};
var func = function(){ console.log('this is function'); }
var und  = undefined;
var nul  = null;
var date = new Date();
var reg  = /^[a-zA-Z]{5,20}$/;
var error= new Error();

function Person(){
  
}
var tom = new Person();

// undefined null  constructor  
console.log(
    tom.constructor==Person,
    num.constructor==Number,
    str.constructor==String,
    bool.constructor==Boolean,
    arr.constructor==Array,
    json.constructor==Object,
    func.constructor==Function,
    date.constructor==Date,
    reg.constructor==RegExp,
    error.constructor==Error
);
//      true
undefinedとnull以外のタイプは、constructor属性でタイプを判断できます.
4,prototype.toString.call()
各オブジェクトの種類は、toString()によって取得することができる.各オブジェクトがObject.prototype.toString()によって検出されるためには、Function.prototype.call()またはFunction.prototype.apply()の形で呼び出す必要があり、検査対象を伝達する最初のパラメータとして、thisArgと呼ぶ.
var toString = Object.prototype.toString;

toString.call(123); //"[object Number]"
toString.call('abcdef'); //"[object String]"
toString.call(true); //"[object Boolean]"
toString.call([1, 2, 3, 4]); //"[object Array]"
toString.call({name:'wenzi', age:25}); //"[object Object]"
toString.call(function(){ console.log('this is function'); }); //"[object Function]"
toString.call(undefined); //"[object Undefined]"
toString.call(null); //"[object Null]"
toString.call(new Date()); //"[object Date]"
toString.call(/^[a-zA-Z]{5,20}$/); //"[object RegExp]"
toString.call(new Error()); //"[object Error]"
このように、Object.prototype.toString.call()の方式を使って変数のタイプを判断するのが最も正確な方法であることが見られます.