一:javascript有七种内置类型
(1)空值:null(空值,指曾被赋过值,但是目前没有值)
(2)未定义:undefined(从未被赋过值)
(3)布尔值:boolean
(4)数字:number
(5)字符串:srting
(6)对象:object
(7)符号:symbol(ES6新增)
二:类型查看
(1)正常类型判断
可以用typeof运算符查看值得类型,它返回的是类型的字符串值,有意思的是,这七种类型和他们的字符串值并不是一一对应的
console.log(typeof(undefinned)) // undefined
console.log(typeof(true)) // boolean
console.log(typeof(42)) // number
console.log(typeof('42')) // string
console.log(typeof({ life : 42})) // object
console.log(typeof(Symbol())) // symbol
(2)null:特殊类型的判断
以上类型均有同名的字符串值与之对应
null不在此列,它比较特殊, type对它的处理有问题
console.log(typeof(null)) // object
正确的返回值应该是 ‘null’, 但是这个bug由来已久,在javascript中已经存在了将近二十几年了,也许永远都不会修复,因为这个牵扯到了太多的web系统,‘修复’它会产生更多的bug,令 许多系统无法正常工作
对null值类型的判断需要使用复合条件来判断
var a = null
console.log(!a && typeof a === 'object') // true
null是‘假值’,也是唯一一个用typeof检测会返回‘object’的基本类型值
(3)function:object的子类型
console.log(typeof(function a(){})) // function
输出的类型不是上面的七种类型,这样说function函数也是javascript的一个类型,然后查阅规范就知道,他实际上是object的一个子类型,具体来说,函数是‘可调用对象’,它有一个内部属性[[Call]],该属性使其可以被调用
(4)数组:object的子类型
console.log(typeof([1,2, 3])) // object
数组也是对象,确切的说,数组也是object的一个子类型