简介
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 的类型是 object
typeof null // "object"
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
2.instanceof 运算符
instanceof 运算符返回一个布尔值,表示对象是否为某个构造函数的实例。
instanceof 运算符的左边是实例对象,右边是构造函数。它会检查右边构建函数的原型对象(prototype),是否在左边对象的原型链上。
// instanceof 运算符只能用于对象,不适用原始类型的值以及undefined,null
var s = 'hello'
s instanceof String // false
instanceof 的用处
var x = [1, 2, 3];
var y = {};
var date = new Date();
x instanceof Array // true
y instanceof Object // true
date 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"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。