JavaScript中 奇怪的typeof解析 (Null, Array)

在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);

  

结果:

  

 

  本人:小白一枚,第一次写博客,有什么写错的地方,请各位大神指点出来,必定虚心学习

原文地址:https://www.cnblogs.com/bailaotou/p/9921070.html