目前有七种内置类型:

  • 空值(null)
  • 未定义(undefined)
  • 布尔值(boolean)
  • 数字(number)
  • 字符串(string)
  • 对象(object)
  • 符号(symbol,ES6中新增)

      除对象外,其他统称为“基本类型”

typeof undefined === 'undefined';       // true
typeof true  === 'boolean';             // true
typeof 42 === 'number';                 // true
typeof '42' === 'string';               // true
typeof {life:42} === 'object';          // true
typeof Symbol() === 'symbol';           // true

但是null比较特殊,typeof对它的处理有问题:

typeof null === 'object';     // true

需要使用复合条件来检测null值的类型:

var a = null;
(!a && typeof a === 'object');    // true

 

还有一种情况:

typeof function a(){ /* .. */ } === 'function';    // true

这并不代表function也是内置类型,而是因为函数是“可调用对象”,它有一个内部属性[[call]],该属性使其可被调用。(这情况和数组一样,数组typeof出来也是object,因为它们都是object的子类型)

它还有属性,它的lenth就是它的明参数的个数:

function a(a,b){/*..*/}
a.length;      // 2

function c(){/*..*/}
c.length;    // 0

 

变量没有类型,它的值才有,typeof时测的是值的类型

当变量没有值时,不管有没有声明过,typeof的结果都是'undefined'

var a;              // undefied
b;                    // b is not defied

typeof a;         // 'undefined'
typeof b;         // 'undefined'