简介
JavaScript 语言的每一个值,都属于某一种数据类型
原始类型
- boolean
- number
- string
特殊值
- undefined
- null
复杂类型
- object
- array
- function
判断值的类型
1.typeof 运算符
typeof 运算符可以返回一个值的数据类型。
typeof true // "boolean"typeof 100 // "number"typeof 'Hello World' // "string"var fn = function() { console.log(str);}typeof fn // "function"var u;typeof u // "undefined"// 由于历史原因,null 的类型是 objecttypeof null // "object"typeof window // "object"typeof {} // "object"typeof [] // "object"
2.instanceof 运算符
instanceof 运算符返回一个布尔值,表示对象是否为某个构造函数的实例。
instanceof 运算符的左边是实例对象,右边是构造函数。它会检查右边构建函数的原型对象(prototype),是否在左边对象的原型链上。
// instanceof 运算符只能用于对象,不适用原始类型的值以及undefined,nullvar s = 'hello's instanceof String // false
instanceof 的用处
var x = [1, 2, 3];var y = {};var date = new Date();x instanceof Array // truey instanceof Object // truedate instanceof Date // true
3.Object.prototype.toString 方法
Object.prototype.toString.call(value)
- 数值:返回[object Number]。
- 字符串:返回[object String]。
- 布尔值:返回[object Boolean]。
- undefined:返回[object Undefined]。
- null:返回[object Null]。
- 数组:返回[object Array]。
- arguments 对象:返回[object Arguments]。
- 函数:返回[object Function]。
- Error 对象:返回[object Error]。
- Date 对象:返回[object Date]。
- RegExp 对象:返回[object RegExp]。
- 其他对象:返回[object Object]。
Object.prototype.toString.call(1) // "[object Number]"Object.prototype.toString.call('') // "[object String]"Object.prototype.toString.call(true) // "[object Boolean]"Object.prototype.toString.call(undefined) // "[object Undefined]"Object.prototype.toString.call(null) // "[object Null]"Object.prototype.toString.call(Math) // "[object Math]"Object.prototype.toString.call({}) // "[object Object]"Object.prototype.toString.call([]) // "[object Array]"
利用这个特性,可以写出typeof运算符更准确的类型判断函数
var type = function (o){ var s = Object.prototype.toString.call(o); return s.match(/\[object (.*?)\]/)[1].toLowerCase();};type({}); // "object"type([]); // "array"type(5); // "number"type(null); // "null"type(); // "undefined"type(/abcd/); // "regex"type(new Date()); // "date"