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
posted @ 2020-07-21 16:21  郭励之  阅读(98)  评论(0编辑  收藏  举报