title | date | tags |
---|---|---|
获取数据的类型 |
2017-10-02 |
Javascript |
在Javacript的世界,变量都是用var申明的,但是有时候会想获取变量的类型,怎么办?
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
后来了解到一种方法,可以获得所以数据的类型
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;
}
};