翼度科技»论坛 编程开发 JavaScript 查看内容

我不知道的Javascript

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
Javascript 数据类型

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


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


  • Object

    • Array
    • RegExp
    • Date
    • Math
    • Function

  1.   const a = {
  2.     name: "q"
  3. }
  4. const b = a;
  5. b.name = "b";
  6. console.log(a);// { name: "b" }, 体现了共享引用地址的特点
复制代码
判断数据类型的方法

typeof
  1. typeof 123; // "number"
  2. typeof "123"; // "string"
  3. typeof ""; // "string"
  4. typeof true; // "boolean"
  5. typeof function(){}; // "function"
  6. typeof Undefined; // "undefined"
  7. typeof null; // "object ", 可以使用=== 来判断
  8. typeof []; // "object"
复制代码
instanceof, 判断new 出来的复杂数据类型可以, 判断基本数据类型会有误
  1. "123" instanceof String; // false, 判断不出来
  2. const a = new String('123');
  3. a instanceof String; // true
复制代码
Object.prototype.toString.call(xx).slice(8, -1)

这个方法应该是很全的了,工作中建议使用此方法判断数据类型
  1. Object.prototype.toString.call("123"); // ['object, Object']
  2. Object.prototype.toString.call("123").slice(8, -1); // 'Object'
  3. function testFunc() {
  4.   console.log(123);
  5. }
  6. const r = Object.prototype.toString.call(testFunc).slice(8, -1);
  7. console.log(r); // "Function"
复制代码
手写一个实现
  1. function getType(obj) {
  2.   const type = typeof obj;
  3.   if (type !== "object") return type;
  4.   return Object.prototype.toString.call(obj).slice(8, -1);
  5. }
复制代码
总结

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

来源:https://www.cnblogs.com/gk1314/p/18527284
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具