记
感觉好久没写东西了。什么原因呢,有原因是因为浮躁了一段时间,有原因是因为去了其他网站,哈哈。总归就是懒得。 开头俩句是早上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);
console.log(typeof nul);
console.log(typeof boo);
console.log(typeof num);
console.log(typeof str);
console.log(typeof obj);
console.log(typeof arr);
console.log(typeof fun);
console.log(typeof date);
console.log(typeof reg);
console.log(typeof err);
console.log(typeof arg);
这里就可以看到 为什么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));
console.log(toString.call(nul));
console.log(toString.call(boo));
console.log(toString.call(num));
console.log(toString.call(str));
console.log(toString.call(obj));
console.log(toString.call(arr));
console.log(toString.call(fun));
console.log(toString.call(date));
console.log(toString.call(reg));
console.log(toString.call(err));
console.log(toString.call(arg));
最终答案
function type(obj) {
return typeof obj !== "object" ? typeof obj : Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}
toString 还有其他的用法,自己也不是很了解,还需要学习,这里就是我对这个问题自己的视角和分享啦
|