《你不知道的JavaScript》是一个不错的JavaScript系列书,书名可能有些标题党的意思,但实符其名,很多地方会让你有耳目一新的感觉。
1.typeof null === "object"// true
ES6中JavaScript的类型有:null、undefined、string、number、boolean、object和symbol。但为啥上面的表达式为true呢?这其实是JavaScript的一个bug。最初设计是根据类型对应的前三位是不是0来判断是否为一个object。而null全部为0,所以null的类型误判为object。要准确判断null需要这样:
var a = null; (!a && typeof a === "object"); // true
因为null本身是一个假值("",undefined,false,0)。而像function,{},Array等都属于object。
2.undefined与未申明
而对于未赋值的变量,type of 返回undefined,未申明的变量也返回undefined,虽然这有点迷惑,但用以检测一个变量会比较安全:
直接操作一个未申明的变量会报错,所以下面这样检测比较好:
if(typeof a !=="undefined"){}
等同于:
if(window.a){}
通过window的全局属性去检测,看起来更简洁,但是要注意场景,前提是存在window,且a为全局变量。
3.数字的语法
1)JavaScript中数字前面的0可以省略,小数后面的0也可以省略