每天一点前端知识 - 获取数据类型

67 阅读1分钟

获取类型

const getType = value => Object.prototype.toString.call(value).slice(8, -1).toLowerCase();

判断类型

const isArray = value => getType(value) === 'array';

const isValidArr = value => isArray(value) && !!value.length;

const isObject = value => getType(value) === 'object';

const isValidObj = value => isObject(value) && !!Object.keys(value).length;

const isFunction = value => getType(value) === 'function';

const isError = value => getType(value) === 'error';

const isRegExp = value => getType(value) === 'regexp';

const isElement = value => getType(value).indexOf('element') > -1;

const isAsync = value => getType(value) === 'promise' || (isObject(value) && isFunction(value.then));

const isUrl = url => /^https?:\/\/[^\s/?.#]+\.[^\s]+/.test(url);

const isDate = (...val) => !Number.isNaN(new Date(...val).valueOf());

const isBase64Image = str => str.match(/^data:image\/([a-zA-Z0-9]+);base64,.+/i);

示例

getType(2); // number
getType('hi'); // string
getType([]); // array
getType({a: 123}); // object

isArray([]); // true
isValidArr([1]); // true
isObject({}); // true
isValidObj({}); // false
isFunction(() => {}); // true
isError(new Error()); // true
isRegExp(/\d+/); // true
isElement(<span>1</span>); // true
isAsync(new Promise((res, rej) => {})); // true
isUrl('http://abc.com'); // true
isDate('2022', '10', '11'); // true
isBase64Image('data:image/png;base64,test'); // [data:image/png;base64,test, png]

1.png

演示地址:ihuxy.com/play?utils=…