美文网首页
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基础

    javascript: 变量的使用、数据类型、if判断、循环语句 javascript 中的注释: //...

  • JavaScript 变量类型的判断

    JavaScript存在两套类型系统:一套是基本数据类型,另一套是对象类型系统。基本数据类型在ES6中包括7种,分...

  • 前端高频面试题-JavaScript部分

    JavaScript的数据类型 基本类型 引用类型 举例 Symbol的作用 判断变量的类型 typeof ins...

  • Javascript 中的变量类型判断

    熟悉 JavaScript 数据类型的话我们知道在 JavaScript 这门语言中存在基本类型(值类型),如Un...

  • 1.JavaScript的数据类型有哪些,如何判断某变量是否为数组数据类型? 答:数据类型:string,num...

  • 前端面试常见问题

    1、JavaScript中的数据类型有哪些? 2、如何判断一个变量的类型是Array 还是Object? 3、数组...

  • 前端面试题总结(一)

    1.JavaScript的数据类型有哪些,如何判断某变量是否为数组数据类型?答:string,number,boo...

  • JavaScript 与 Swift的异同

    JavaScript与Swift一样,是动态语言类型,即不用指定变量类型,会根据赋值的内容动态的判断出它的类型。与...

  • js浅拷贝和深拷贝

    javaScript的变量类型 javaScript的变量类型基本类型:引用类型: 浅拷贝和深拷贝的区分 浅拷贝浅...

  • 如何判断javascritp变量的类型?

    在javascript变量的类型可以是以下这些: 函数 对象 数组 字符串 数字 null 那么如何判断一个变量是...

网友评论

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

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