推断数据类型

推断一个数据是不是是数组,在以往的完成中,能够基于鸭子范例的观点来推断,比方推断这个数据有无length 属性,有无sort要领或许slice 要领等。但更好的体式格局是用Object.prototype.toString来盘算。

Object.prototype.toString.call(obj)返回一个字符串,比方Object.prototype.toString.call([1,2,3])老是返回”[objectArray]”,而Object.prototype.toString.call(“str”)老是返回”[objectString]”。所以我们能够编写一系列的isType 函数。代码以下:

var isString = function( obj ){
    return Object.prototype.toString.call( obj ) === '[object String]';
};
var isArray = function( obj ){
    return Object.prototype.toString.call( obj ) === '[object Array]';
};
var isNumber = function( obj ){
    return Object.prototype.toString.call( obj ) === '[object Number]';
};
var isType = function( type ){
    return function( obj ){
    return Object.prototype.toString.call( obj ) === '[object '+ type +']';
}
};
var isString = isType( 'String' );
var isArray = isType( 'Array' );
var isNumber = isType( 'Number' );
    console.log( isArray( [ 1, 2, 3 ] ) ); // 输出:true

我们还能够用轮回语句,来批量注册这些isType 函数:

var Type = {};
    for ( var i = 0, type; type = [ 'String', 'Array', 'Number'][ i++ ]; ){
        (function( type ){
            Type[ 'is' + type ] = function( obj ){
                return Object.prototype.toString.call( obj )==='[object '+ type +']';
            }
        })( type )
    };
Type.isArray( [] ); // 输出:true
Type.isString( "str" ); // 输出:true
    原文作者:wee911
    原文地址: https://segmentfault.com/a/1190000004543598
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞