js有7种内置类型,分别是undefined
null
boolean
string
number
symbol
object
除对象之 Object
外,其他统称为“基本类型”。
符号 symbol
是ES6 中新增
除 null
以外的六种类型均有同名的字符串值与之对应
typeof undefined === "undefined"; // true
typeof true === "boolean"; // true
typeof 1 === "number"; // true
typeof "1" === "string"; // true
typeof {} === "object"; // true
typeof Symbol() === "symbol"; // true
typeof null === "object"; // true
typeof
返回值为 object
的值中,只有 null
为假值,所以我们可以用下面方法检查变量是否为 null
var a = null;
(!a && typeof a === "object"); // true
再来看下面一段代码
typeof function a(){} === "function"; // true
虽然 typeof
会为函数返回单独的字符串值 function
,但是规范约定它实际上是 object
的一个“子类型”。具体来说,函数是“可调用对象”,它有一个内部属性 [[Call]],该属性使其可以被调用。
另一个需要注意的是数组
typeof [] === "object"; // true
确切地说,数组也是 object
的一个“子类型”
我们可以通过下面的方法检查变量是不是数组
var a = []
Array.isArray(a) // true
Object.prototype.toString.call(a) === "[object Array]" // true
typeof
处理未声明的变量时,会返回 undefined
, 这是因为 typeof
有一个特殊的安全防范机制。这样我们可以安全的检查变量是否声明了
if (!nodeclar) { // 如果nodeclar为声明,会报错
// ...
}
if (typeof nodeclar !== undefined) { // 不报错
// ...
}
需要注意的是
在对变量执行 typeof 操作时,得到的结果并不是该变量的类型,而是该变量持有的值的类型,因为 JavaScript 中的变量没有类型。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。