js数据类型

8undefinednull、 Number 、 string、 Boolern、 symbol、 BigInt、 object
内置对象
Array
AggregateError // 错误集合
ArrayBuffer

判断js数据类型的方法

1.最常见的判断方法:typeof

2.已知对象类型:   instanceof 

3.对象原型链判断方法: prototype 通用但很繁琐

4.根据对象的构造器constructor进行判断

5.jQuery方法: jquery.type()

6.严格运算符:   ===
  1. typeof
6 种原始类型,使用 typeof 运算符检查:
  undefinedtypeof instance === "undefined"
  Boolean:typeof instance === "boolean"
  Number:typeof instance === "number"
  String:typeof instance === "string
  BigInt:typeof instance === "bigint"
  Symbol :typeof instance === "symbol"
nulltypeof instance === "object"。
Object:typeof instance === "object"。

缺点:
任何 constructed 对象实例的特殊非数据结构类型,也用做数据结构:
 new Objectnew Arraynew Mapnew Setnew WeakMapnew WeakSetnew Datetypeof 的结果都是 object
  1. instanceof
[1,2,3] instanceof Array           // true
new Date() instanceof Date         // true
new Function() instanceof Function // true
null instanceof Object             // false

3.对象原型链判断方法: prototype toString

console.log(Object.prototype.toString.call("11"))          // [object String]
console.log(Object.prototype.toString.call(11))            // [object Number]
console.log(Object.prototype.toString.call(new Number(11))) // [object Number]
console.log(Object.prototype.toString.call(true))          // [object Boolean]
console.log(Object.prototype.toString.call([1, 2]))       // [object Array]
console.log(Object.prototype.toString.call(null))           // [object Null]
console.log(Object.prototype.toString.call(undefined))       // [object Undefined]
  1. constructor
constructor 判断方法跟instanceof相似,但是constructor检测Object与instanceof不一样,constructor还可以处理基本数据类型的检测,不仅仅是对象类型
注意:
 1.null和undefined没有constructor;
 2.判断数字时使用(),比如  (123).constructor,如果写成123.constructor会报错
 3.constructor在类继承时会出错,因为Object被覆盖掉了,检测结果就不对了

五.jQuery方法: jquery.type()

据说是无敌万能的方法.如果对象是null跟undefined,直接返回"null"和"undefined",

注意:在使用时,一定要引入jquery文件,不然会报错,jQuery is not defined


一般变量用typeof,

已知对象类型用instanceof,

通用方法Object.prototype.toString.call()

jQuery项目万能方法jQuery.type()

参照jq 封装

const class2type = {};
const typeList = "Boolean Number String Function Array Date RegExp Object Error Symbol Bigint";
typeList.split(" ").forEach(function (name) {
  class2type["[object " + name + "]"] = name.toLowerCase();
});

export const toType = function(obj) {
  if (obj == null) {
    return obj + "";
  }
  return typeof obj === "object"
    ? class2type[toString.call(obj)] || "object"
    : typeof obj;
};