js-封装一个函数,准确判断数据类型
学习过JS的童鞋都知道,在判断数据类型的过程有很多方法。
typeof
instanceof
等,但是多多少少都有bug (有些场景不适合用)。
最有用的是toString方法。(Object.prototype.toString.call()) 最准确了,包括一些特殊的数据类型。
下面直接粘贴了封装后的函数,准确判断数据类型。
<!-- 封装一个函数,判断数据类型 -->
<script>
function typeofData(data) {
let type = Object.prototype.toString.call(data);
switch (type) {
case "[object Object]":
return "object";
case "[object Array]":
return "array";
case "[object Number]":
return "number";
case "[object String]":
return "string";
case "[object Undefined]":
return "undefined";
case "[object Null]":
return "null";
case "[object Function]":
return "function";
case "[object Symbol]":
return "symbol";
default:
return "wrong input";
}
};
let a = 1;
let b = {};
let c = [];
let str = new String("");
let str2 = "";
let foo = function() {};
let sym = Symbol();
console.log(typeofData(a));
console.log(typeofData(b));
console.log(typeofData(c));
console.log(typeofData(str));
console.log(typeofData(str2));
console.log(typeofData(foo));
console.log(typeofData(sym));
console.log(typeofData(null));
console.log(typeofData(undefined));
console.log(typeofData(NaN));
/*
number
数据类型的判断.html:66 object
数据类型的判断.html:67 array
数据类型的判断.html:68 string
数据类型的判断.html:69 string
数据类型的判断.html:70 function
数据类型的判断.html:71 symbol
数据类型的判断.html:72 null
数据类型的判断.html:73 undefined
数据类型的判断.html:74 number
*/
</script>