JavaScript 拥有带类型的值,没有带类型的变量。变量可以在任何时候,持有任何值。
基本(primitive)类型
- null
- undefined
- boolean
- number
- string
- object
- symbol – 在ES6 中被加入的
使用typeof
可以判断一个值的类型是什么,而且总是返回七种字符串值(注意,类型是字符串)中的一种。
1 | var a = null |
注意:
1.如果你想要使用null
类型来测试null
值,你需要一个复合条件:
1 | var a = null |
2.可以看到typeof
可以返回function
。
1 | typeof function a () { /* ... */} === 'function' // true |
但是function
不是JS 中的一种顶层的内建类型。它实际上是对象(object) 的“子类型”。特别地,一个函数(function)被称为“可调用对象” – 一个拥有[[Call]]
内部属性,运行被调用的对象。
3.对于数组
1 | typeof [] === 'object' // true |
它也仅仅是对象。将它们认为是对象的“子类型”,带有被数字索引的附加性质(与仅仅使用字符串键的普通对象相反),并维护着一个自动更新的.length
属性。
4.注意“undefined” 与“undeclared” 的区别
1 | var a |
一个“undefined” 变量是在可访问的作用域中已经被声明过的,但是在 这个时刻 它里面没有任何值。相比之下,一个“undeclared” 变量是在可访问的作用域中还没有被正式声明的。
“undefined” 同“is not defined” 是非常不同的。
5.当typeof
一个未被声明的变量的返回值
1 | var a |
typeof
操作符甚至为“undeclared”(或“not defined”)变量返回'undefined'
。当我们执行typeof b
时,即使b
是一个未声明变量,也不会有错误被抛出。这是typeof
的一种特殊的安全防卫行为。