我不知道的Javascript

  • 我不知道的Javascript已关闭评论
  • 36 次浏览
  • A+
所属分类:Web前端
摘要

这个方法应该是很全的了,工作中建议使用此方法判断数据类型手写一个实现总结


Javascript 数据类型

基本数据类型(存放在栈内存中, 当被引用和拷贝时会复制一个完全相等的变量)

  • Number, String, Boolean, Symbol, Undefined, Null

引用数据类型(对象类型, 存放在堆内存中, 存储的是地址, 当引用和拷贝时,提供的是地址. 有共享地址的特征)

  • Object
    • Array
    • RegExp
    • Date
    • Math
    • Function
  const a = {     name: "q"  } const b = a; b.name = "b"; console.log(a);// { name: "b" }, 体现了共享引用地址的特点 

判断数据类型的方法

typeof

typeof 123; // "number" typeof "123"; // "string" typeof ""; // "string" typeof true; // "boolean" typeof function(){}; // "function" typeof Undefined; // "undefined" typeof null; // "object ", 可以使用=== 来判断  typeof []; // "object" 

instanceof, 判断new 出来的复杂数据类型可以, 判断基本数据类型会有误

"123" instanceof String; // false, 判断不出来 const a = new String('123'); a instanceof String; // true 

Object.prototype.toString.call(xx).slice(8, -1)

这个方法应该是很全的了,工作中建议使用此方法判断数据类型

Object.prototype.toString.call("123"); // ['object, Object'] Object.prototype.toString.call("123").slice(8, -1); // 'Object' function testFunc() {   console.log(123); } const r = Object.prototype.toString.call(testFunc).slice(8, -1); console.log(r); // "Function" 

手写一个实现

function getType(obj) {   const type = typeof obj;   if (type !== "object") return type;   return Object.prototype.toString.call(obj).slice(8, -1); } 

总结

  • typeof 可以判断基本数据类型(null除外),但是在判断引用数据类型中,除了function其他的也无法判断
  • instanceof 可以判断复杂的引用数据类型, 但是不能正确判断基础数据类型