JavaScript 里的 3 个 6

一. 6 种 type

JavaScript 虽然是弱类型的语言,但是也是有类型的。它有 5 种简单类型,分别是:

1. number
2. string
3. boolean
4. undefined
5. null(其实是一种特殊的对象,历史原因.typeof(null)的结果是 object

第 6 种,object 对象。所有不属于以上 5 种简单类型的是一种类型,例如函数。

注意 1,2,3 类型是类似对象的,就是他们有方法,比如

var x = 0.7853;
x.toFixed(2); //会得到 0.79,但是不是 number 哦,是 string 类型。坑人吧。

(ES6 新加一种 primitive type: symbol)

二. 6 种 typeof 结果

JavaScript 乱就乱在这里,你如果使用语言自带的 typeof 函数去测试所有变量,只会得到以下 6 种值,和上面有些出入。

1. number
2. string
3. boolean
4. undefined
5. function //function 其实也是一种 object
6. object 

三. 6 种会自动转换为 false 的变量

1. 0(包括 -0)(number) 
2. NaN        (number)
3. ''         (string。注意不是空格,而是什么都没有的空字符串) 
4. false      (boolean)
5. undefined  (undefined)
6. null       (object)

所以我们可以直接使用 if(variable) 来简化变量值判断。

但是要注意的是如果是两个值比较的话,要使用 !!(variable) 来转为 boolean 再比较。因为 NaN 和自己不相等,逻辑上可能不对。详细的参考这里.