美文网首页
JavaScript 变量类型的判断

JavaScript 变量类型的判断

作者: jiansheng | 来源:发表于2018-12-24 17:19 被阅读0次

    JavaScript存在两套类型系统:一套是基本数据类型,另一套是对象类型系统。基本数据类型在ES6中包括7种,分别是undefined、null、boolean、string、number、object和symbol。基本数据类型是通过typeof来检测的。对象类型系统是以基础类型系统为基础的,通过 instanceof来检测。然而,JavaScript自带的这两套识别机制非常不靠谱,于是催生了isXXX系列。

    判定变量类型的工具

    const toString = Object.prototype.toString;
    const is = (type) => {
        return (value) => {
            return toString.call(value) == `[object ${type}]`;
        };
    };
    // const is = (type) => (value) => toString.call(value) == `[object ${type}]`;
    
    const types = ['Undefined', 'Null', 'Boolean', 'String', 'Number', 'Object', 'Symbol'];
    
    const typeUtil = types.reduce((util, type) => {
      util[`is${type}`] = is(type);
      return util;
    }, {});
    
    const undefinedValue = undefined;
    const stringValue = '';
    const nullValue = null;
    const booleanValue = true;
    const numberValues = [0, NaN, Infinity];
    const objectValue = {};
    const symbolValue = Symbol();
    
    console.group('test typeUtil.isUndefined');
    console.log('undefinedValue', typeUtil.isUndefined(undefinedValue));
    console.log('stringValue', typeUtil.isUndefined(stringValue));
    console.log('nullValue', typeUtil.isUndefined(nullValue));
    console.log('booleanValue', typeUtil.isUndefined(booleanValue));
    console.log('numberValues', numberValues.map(typeUtil.isUndefined));
    console.log('objectValue', typeUtil.isUndefined(objectValue));
    console.log('symbolValue', typeUtil.isUndefined(symbolValue));
    console.groupEnd();
    console.log('------');
    console.group('test typeUtil.isNull');
    console.log('undefinedValue', typeUtil.isNull(undefinedValue));
    console.log('stringValue', typeUtil.isNull(stringValue));
    console.log('nullValue', typeUtil.isNull(nullValue));
    console.log('booleanValue', typeUtil.isNull(booleanValue));
    console.log('numberValues', numberValues.map(typeUtil.isNull));
    console.log('objectValue', typeUtil.isNull(objectValue));
    console.log('symbolValue', typeUtil.isNull(symbolValue));
    console.groupEnd();
    console.log('------');
    console.group('test typeUtil.isBoolean');
    console.log('undefinedValue', typeUtil.isBoolean(undefinedValue));
    console.log('stringValue', typeUtil.isBoolean(stringValue));
    console.log('nullValue', typeUtil.isBoolean(nullValue));
    console.log('booleanValue', typeUtil.isBoolean(booleanValue));
    console.log('numberValues', numberValues.map(typeUtil.isBoolean));
    console.log('objectValue', typeUtil.isBoolean(objectValue));
    console.log('symbolValue', typeUtil.isBoolean(symbolValue));
    console.groupEnd();
    console.log('------');
    console.group('test typeUtil.isString');
    console.log('undefinedValue', typeUtil.isString(undefinedValue));
    console.log('stringValue', typeUtil.isString(stringValue));
    console.log('nullValue', typeUtil.isString(nullValue));
    console.log('booleanValue', typeUtil.isString(booleanValue));
    console.log('numberValues', numberValues.map(typeUtil.isString));
    console.log('objectValue', typeUtil.isString(objectValue));
    console.log('symbolValue', typeUtil.isString(symbolValue));
    console.groupEnd();
    console.log('------');
    console.group('test typeUtil.isNumber');
    console.log('undefinedValue', typeUtil.isNumber(undefinedValue));
    console.log('stringValue', typeUtil.isNumber(stringValue));
    console.log('nullValue', typeUtil.isNumber(nullValue));
    console.log('booleanValue', typeUtil.isNumber(booleanValue));
    console.log('numberValues', numberValues.map(typeUtil.isNumber));
    console.log('objectValue', typeUtil.isNumber(objectValue));
    console.log('symbolValue', typeUtil.isNumber(symbolValue));
    console.groupEnd();
    console.log('------');
    console.group('test typeUtil.isObject');
    console.log('undefinedValue', typeUtil.isObject(undefinedValue));
    console.log('stringValue', typeUtil.isObject(stringValue));
    console.log('nullValue', typeUtil.isObject(nullValue));
    console.log('booleanValue', typeUtil.isObject(booleanValue));
    console.log('numberValues', numberValues.map(typeUtil.isObject));
    console.log('objectValue', typeUtil.isObject(objectValue));
    console.log('symbolValue', typeUtil.isObject(symbolValue));
    console.groupEnd();
    console.group('test typeUtil.isSymbol');
    console.log('undefinedValue', typeUtil.isSymbol(undefinedValue));
    console.log('stringValue', typeUtil.isSymbol(stringValue));
    console.log('nullValue', typeUtil.isSymbol(nullValue));
    console.log('booleanValue', typeUtil.isSymbol(booleanValue));
    console.log('numberValues', numberValues.map(typeUtil.isSymbol));
    console.log('objectValue', typeUtil.isSymbol(objectValue));
    console.log('symbolValue', typeUtil.isSymbol(symbolValue));
    console.groupEnd();
    
    test

    相关文章

      网友评论

          本文标题:JavaScript 变量类型的判断

          本文链接:https://www.haomeiwen.com/subject/ztuzkqtx.html