当前位置:嗨网首页>书籍在线阅读

17-类型判断运算符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.9.2 类型判断运算符

类型判断运算符返回一个字符串形式的类型名称。遗憾的是,这个运算符并没有精确地对应JavaScript中的七种数据类型(undefined,null,布尔,数字,字符串,符号,及对象),这一点造成了无休止的诟病和疑惑。

类型判断运算符有个奇怪的地方,这通常被认为是一个错误: typeof null 的结果是 "object" ,很明显,null不可能是对象(它是基本类型)。这个问题由来已久,且其起因不那么有趣,它已经多次被建议修改,但是因为很多现存代码中都用到这个运算符,所以它就一直保留在JavaScript的语言规范中。

类型判断运算符另外一个经常受到批判的地方是它不能区分数组和非数组对象。它能正确识别函数对象(函数也是一种特殊的对象),但是 typeof [] 的结果却是 "object"

表5-8列出了 typeof 所有可能的返回值。

表5-8  typeof返回值

| 表 达 式 | 返 回 值 | 备  注 | | :----- | :----- | :----- | :----- | :----- | | typeof undefined | "undefined" | | typeof null | "object" | 很不幸,但这是事实 | | typeof {} | "object" | | typeof true | "boolean" | | typeof 1 | "number" | | typeof "" | "string" | | typeof Symbol() | "symbol" | ES6 新特性 | | typeof function(){} | "function" |

因为 `typeof` 是一个运算符,不需要搭配括号。也就是说,判断变量x的类型,可以直接使用 `typeof x` ,而不是 `typeof(x)` 。后者也是合法的,括号只是用来构建不必要的表达式组。