没错,我是在说 javascript
顾名思义,typeof(xxx) 应该返回传入参数的"类型",而在 javascript 中,只有六种类型 (Undefined, Null, Boolean, Number, String, Object),但 typeof 并不这么认为
typeof(3.14) // => number
typeof('3.14') // => string
typeof(false) // => boolean
typeof(undefined) // => undefined
typeof({}) // => object
似乎一切正常? But
- 传入 null 的时候
typeof(null) // => object ??? null 是 object ?
有经验的 js 玩家大都知道这个的坑,所以在诸如判断对象是个 object 或 array 的时候得这么写
if(obj && typeof(obj) === 'object' ){//...}
or
if(obj != null && typeof(obj) === 'object' ){//...}
- 传入 function 的时候
typeof(function Asd(){}) # => function function 并不是六大类型啊
function 的确不是六大类型,不过也没人规定 typeof 就必须返回六大类型啊。(⊙v⊙ 好像是这个道理) 那么
function 和 object 的关系和区别在哪里呢? 一句话概括:
function 是可以创造 object 的 object 。 所以,function 也是 object,
具体两者的区别以及 function create 的时候忘记写 new 的坑看这里。
妈蛋,感觉 js 到处是陷阱