在JavaScript中,我们常常用到typeof 来判断一个元素的类型,但是在实际开发中我们会发现一个很难受的问题。
Null,Array (孤立他俩)
在 typeof Null 和 typeof Array中 居然返回的是 Object类型,。。。。。。。
纳尼!!!上去就给他俩一个反抽!!难道是哪里写错了么????
原来是因为,javascript在当初设计的时候出现的BUG (突然感觉自己很牛掰)。
在 ES6制定 中曾有关于修复此 bug 的提议,提议中称应该让 typeof Null === 'null', 但是最后因为考虑到历史积累代码牵扯范围太广,责任重大取消这一个更改,也就是说这不在是一个
BUG了,而是龟ding。而对于Array,typeof本着万物皆对象的原则,返回的结果就是 Object了 (原因其实很复杂,设计到Javascript的底层二进制解析,感兴趣可以在网上查下,资料很多)
那么问题来了,在我们实际开发中,需要准确的区别 Number,Array,Object,String,Null,undefined甚至是funtion的时候怎么办??????????
废话说了这么多,进入正题 (代码奉上)
//
function typeOf (obj) {
return toString.call(obj).slice(8, -1)
};
//
let fun = function () {
console.log (123);
}
//
let objs = typeOf ({key: '123', val: '345'});
let num = typeOf (123);
let str = typeOf ('我是个字符串');
let arr = typeOf ( ['11', '22', '33']);
let nulls = typeOf (null);
let un = typeOf (undefined);
let funs = typeOf (fun);
console.log (objs, num, str, arr, nulls, un, funs);
结果:
本人:小白一枚,第一次写博客,有什么写错的地方,请各位大神指点出来,必定虚心学习