Skip to content

Latest commit

 

History

History
93 lines (66 loc) · 1.83 KB

获取数据的类型.md

File metadata and controls

93 lines (66 loc) · 1.83 KB
title date tags
获取数据的类型
2017-10-02
Javascript

在Javacript的世界,变量都是用var申明的,但是有时候会想获取变量的类型,怎么办?

typeof

const a = 1;
console.log(typeof a); // number

const b = '1';
console.log(typeof b); // string

const c = true;
console.log(typeof c) // boolean

基本类型用 typeof 是ok的,但是引用类型呢

const d = {};
console.log(typeof d); // object

const e = [];
console.log(typeof e); // object

const f = () => {};
console.log(typeof f); // function

const g = null;
console.log(typeof g); // object

const h = undefined;
console.log(typeof h); // undefined

const j = Symbol('j');
console.log(typeof j); // symbol

由此可见,typeof其实无法分辨array、object、null

Object.prototype.toString.call()

后来了解到一种方法,可以获得所以数据的类型

const a = 1;
console.log(Object.prototype.toString.call(a)); // Number

const b = '1';
console.log(Object.prototype.toString.call(b)); // String

const c = true;
console.log(Object.prototype.toString.call(c)) // Boolean

const d = {};
console.log(Object.prototype.toString.call(d)); // Object

const e = [];
console.log(Object.prototype.toString.call(e)); // Array

const f = () => {};
console.log(Object.prototype.toString.call(f)); // Function

const g = null;
console.log(Object.prototype.toString.call(g)); // Null

const h = undefined;
console.log(Object.prototype.toString.call(a)); // Undefined

const j = Symbol('j');
console.log(Object.prototype.toString.call(j)); // Symbol

使用

由此,可以写一个通用函数

const getType = (data) => {
    try {
        return Object.prototype.toString.call(data).match(/([A-Z][a-z]+)/g)[0].toLowerCase();
    } catch (e) {
        console.error(e);
        return data;
    }
};