Javascript 类型判断
鉴于 ECMAScript 是松散类型(loosely typed)的,因此需要有一种手段来检测给定变量的数据类型——typeof
和 instanceof
操作符提供了这方面的信息:
typeof 操作符
typeof
操作符可能返回下列某个字符串:
类型字符串 | 描述 |
---|---|
undefined |
如果这个值未定义 |
boolean |
如果这个值是布尔值 |
string |
如果这个值是字符串 |
number |
如果这个值是数值 |
object |
如果这个值是对象或 null |
function |
如果这个值是函数 |
例如:
1 | typeof undefined |
null
由于在检测对象的值时,typeof
无法辨别出 null
与对象,因此建议使用下列这样的判断:
1 | var my_value = null; |
NaN
typeof
无法辨别出 NaN
和数字:
1 | typeof NaN === 'number'; // true |
isNaN()
函数可以解决这类判断问题:
1 | isNaN(NaN); // true |
Infinity
typeof
无法辨别出 Infinity
和数字:
1 | typeof Infinity === 'number'; // true |
可以自定义一个 isNumber()
函数用于判断数字:
1 | function isNumber(value) { |
function
比较特殊的类型是 function
:
1 | typeof function(){} |
从技术角度讲,函数在 ECMAScript 中是对象,而不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过 typeof
操作符来区分函数和其他对象是有必要的。
instanceof 操作符
typeof
操作符存在一个问题:在判断任何引用类型时都会返回 "object"
,因此 ECMAScript 引入了 instanceof
操作符来解决这个问题:
1 | [] instanceof Array |
参考
- 《JavaScript 高级程序设计》