JavaScript数据类型判断
1. JavaScript数据类型
基本数据类型:null, undefined, boolean, number, string, symbol
引用数据类型:Object(包含Function, Date, Array, RegExp, Error, Arguments等)
基本数据类型存放于栈内存中,引用数据类型在栈内存和堆内存中均有,其中栈中存储了指针,指向堆中该实体的起始位置,当访问引用数据类型时,会首先在栈内存中查找器指针,然后到堆中获得实体
2. 判断数据类型
typeof instanceof constructor Object.prototype.toString.call()
对于对象来说,除了函数之外,其余对象的typeof都会返回object
typeof [] // object
typeof function(){} // function
typeof null // object
instanceof
也可以用来判断对象的数据类型,但是不能判断基本数据类型
[] instanceof Array
function(){} instanceof Function
{} instanceof Object
constructor
可以判断基本数据类型和引用数据类型的类型
(2).constructor === Number;
(true).constructor === Boolean;
('str').constructor === String;
([]).constructor === Array;
(function(){}).constructor === Function;
({}).constructor === Object;
(/abc/).constructor === RegExp;
(new Date()).constructor === Date;
Object.prototype.toString.call
也可以用来判断类型,也是开发中运用最多的一种
var toString=Object.prototype.toString;
console.log(toString.call(und)); // [object Undefined]
console.log(toString.call(nul)); // [object Null]
console.log(toString.call(boo)); // [object Boolean]
console.log(toString.call(num)); // [object Number]
console.log(toString.call(str)); // [object String]
console.log(toString.call(obj)); // [object Object]
console.log(toString.call(arr)); // [object Array]
console.log(toString.call(fun)); // [object Function]
console.log(toString.call(date)); // [object Date]
console.log(toString.call(reg)); // [object RegExp]
console.log(toString.call(err)); // [object Error]
console.log(toString.call(arg)); // [object Arguments]
结合typeof和Object.prototype.toString.call我们也可以实现一个通用的类型监测
function type(obj) {
return typeof obj !== "object"
? typeof obj
: Object.prototype.toString
.call(obj)
.slice(8, -1)
.toLowerCase();
}
console.log(type({})); // object
console.log(type([])); // array
console.log(type(function(){})); // function
console.log(type(1)); // number