怎么判断一个数据类型?

判断数据类型

    • 开始 -- (问 : 为什么面试官会问这个问题?判断数据类型难吗?有技术含量吗?我答的对吗)
    • 数据类型(问:js的数据类型)
    • typeof(typeof 能做什么 不能做什么)
    • 了解typeof缺陷之后怎么解决(Object.prototype.toString)
    • 最终答案

感觉好久没写东西了。什么原因呢,有原因是因为浮躁了一段时间,有原因是因为去了其他网站,哈哈。总归就是懒得。
开头俩句是早上10写得,现在是晚上的22.16分
中间摸了鱼,开了会,骂了街,拨开云雾,终于看懂了困扰的问题
于是再回来,写一写,自己记一记。
每每看到一些东西感觉简单却不会的时候,就想起之前前辈对我的一句评价,差的很远,哈哈哈

开始 – (问 : 为什么面试官会问这个问题?判断数据类型难吗?有技术含量吗?我答的对吗)

答 : 这个问题像是一个综合开放题,你知道的越多,答的越多,知道的少,直接底裤看穿。事实证明面试官一般并不蠢,蠢的是自己,如果你是个小白,看到这个问题,张口就来typeof 判断数据类型,那种自信,那种不可置信怎么会有这种问题, 那你基本就g了。type of 是能判断number string bool undefined function没毛病, 或许你还知道个null,出来是object , 但是你可能不知道是不是还有你会用到的Date , 校验(RegExp --regular expression) , error , Arguments , array ,是不是懵了,其实还有其他的,但是目前答到这里,我感觉就差不多了 。

数据类型(问:js的数据类型)

回答:bool number string object null array undefined symbol
太low 了,真的太low了 这种就是最简单的
回答:基本数据类型:number string bool undefined Symbol null 引用数据类型 array function object
普low
回答 : 存放在栈中的基本数据类型 number string bool undefined Symbol null,存在堆中的object的普通对象,以及 RegExp , error,array(你可以new Array(),Date ,arguments 以及在队列中的function ,其实function 也是一个对象,函数对象,同样可以new Function()。 有点做作,但是轻描淡写,谦虚一点,我觉得成,这里我觉得至少自己得明白。

typeof(typeof 能做什么 不能做什么)

上面也说了 数据这么多 typeof有可以判断的 也有他判断不了的 比如null function array Date typeof它给不了答案或者给不了我们满意的答案

console.log(typeof und);  // undefined
console.log(typeof nul);  // object
console.log(typeof boo);  // boolean
console.log(typeof num);  // number
console.log(typeof str);  // string
console.log(typeof obj);  // object
console.log(typeof arr);  // object
console.log(typeof fun);  // function
console.log(typeof date);  // object
console.log(typeof reg);  // object
console.log(typeof err);  // object
console.log(typeof arg);  // object

这里就可以看到 为什么type of为什么不行 ,至于为什么null返回的是object , 因为是js的bug,具体bug就太细了, 我也说不明白

了解typeof缺陷之后怎么解决(Object.prototype.toString)

这里就看到面试官多调了,人就其实就是想问你这个,除了对数据类型的了解,就是原形链,以及call applay this指向 , 或多或少 这个问题里 都给你安排上了
然后就是考你对象原形链上的toString方法了

var toString=Object.prototype.toString;

console.log(toString.call(und));  // [object Undefined]
console.log(toString.call(nul));  // [object Null]
console.log(toString.call(boo));  // [object Boolean]
console.log(toString.call(num));  // [object Number]
console.log(toString.call(str));  // [object String]
console.log(toString.call(obj));  // [object Object]
console.log(toString.call(arr));  // [object Array]
console.log(toString.call(fun));  // [object Function]
console.log(toString.call(date));  // [object Date]
console.log(toString.call(reg));  // [object RegExp]
console.log(toString.call(err));  // [object Error]
console.log(toString.call(arg));  // [object Arguments]

最终答案

function type(obj) {
  return typeof obj !== "object" ? typeof obj : Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}

toString 还有其他的用法,自己也不是很了解,还需要学习,这里就是我对这个问题自己的视角和分享啦

你可能感兴趣的:(javascript,开发语言,ecmascript)