1、内存空间:spa
为了便于理解,咱们暂且先将Js的内存分为栈内存和堆内存。3d
JavaScript具备垃圾自动回收机制,内存的分配与回收都彻底实现了自动管理。因此咱们在开发时通常会忽视内存空间的问题。可是理解了内存空间,将会对JS理解更加深入,认识也更加清晰。指针
JavaScript有自动垃圾收集机制,那么这个自动垃圾收集机制的原理是什么呢?其实很简单,就是找出那些再也不继续使用的值,而后释放其占用的内存。垃圾收集器会每隔固定的时间段就执行一次释放操做。code
内存的生命周期:分配内存,使用内存,释放内存对象
2、数据类型:blog
5种基本数据类型:生命周期
Number,Boolean,String,Undefined,Nullip
基本类型是不可变的!任何方法都没法改变一个基本类型的值。内存
var name = 'jozo'; name.toUpperCase(); // 输出 'JOZO' console.log(name); // 输出 'jozo'
也不能够给基本类型添加属性或者方法。ci
var person = 'jozo'; person.age = 22; person.method = function(){//...}; console.log(person.age); // undefined console.log(person.method); // undefined
基本数据类型存放于栈内存。包括变量标识符和变量的值。
var name = 'jozo'; var city = 'guangzhou'; var age = 22;
引用数据类型:
Object,Array
能够为引用类型添加属性和方法,也能够删除其属性和方法(delete person.name)。
引用类型的存储须要内存的栈区和堆区共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也能够说是该对象在堆内存的地址,而堆内存中存储这个对象。
var person1 = {name:'jozo'}; var person2 = {name:'xiaom'}; var person3 = {name:'xiaoq'};
3、数据比较:
一、对于基本类型,==和===是有区别的
1)不一样类型(如Number和String)间比较,==之间比较,先转化成同一类型,看“值”是否相等,===若是类型不一样,其结果就是不等
2)同类型比较,直接进行“值”比较
二、对于引用类型,==和===是没有区别的
进行“指针地址”比较
三、基本类型与引用类型比较,==和===是有区别的
1)对于==,将高级转化为基础类型,进行“值”比较
2)由于类型不一样,===结果为false
4、赋值:
基本类型赋值后两个变量互不影响
var a = 10;
var b = a;
引用类型的赋值是地址的复制,因此两个变量指向的仍是同一个对象,对任何一个的操做都会相互的影响。
var a = {};
var b = a;