一.JS的数据类型

基础数据类型: string number  boolean  undefined null Symbol

基础数据类型数据存在 栈中,也就是当前作用域中,随着当前作用域的消失而消失

 

引用数据类型:object

引用数据类型数据 存在 堆中,当没有引用的时候,不同浏览器不同的垃圾回收机制,回收。

chrome:定期查看有没有引用,没有就回收;ie:统计引用的数量,数量为0回收(因为统计这个数量会有误,所以会导致内存溢出)

 

二:判断变量的类型及区别 参考了  全栈然叔  (https://juejin.cn/post/7049383966700208165)的文章

判断变量类型的4中方法:typeof  instanceof   constructor  Object.prototype.toString

typeof   :

语法:typeof target  

返回操作值的数据类型

注:typeof null 返回object;判断引用类型时,除了function->返回function,其他的引用类型 都返回object

instanceof :

语法:target instanceof constructor

检测构造函数的 prototype 属性是否出现在target的原型链上(两者是否属于原型链的关系)

注:基本类型数据不是构造函数的实例,没有原型链,此方法不能判断基本数据类型

  引用类型的原型链上都会有object.pototype,所以 引用数据类型 instanceof Object 都会返回true

  原型链可以被修改,所以结果不准

 

constructor:

语法:target.constructor === constructor

判断target是否是指定构造函数的实例,

注:除了null 和 undefined之外,所有的数据类型都可以判断,但是constructor 属性可以被修改,所以结果值不准

Object.prototype.toString

语法:Object.prototype.toString.call(target)

返回对象的类型字符串

把然叔总结的图拿过来,就是:

 typeofinstanceofconstructorObject.prototype.toString
number
string
boolean
symbol
[]
{}
function() {}
undefined
null
new Date()
/\d/g
new Error()