目前有七种内置类型:
- 空值(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'