参考书籍:红宝书
一、JS中的垃圾清除
(1)标记清除(最常用)
垃圾收集器在运行的使用会给存储在内存中的所有变量都加上标记。然后他会去掉环境中的变量以及被环境中的变量引用的变量的标记。再将其视为
(2)引用计数(用的已经非常的少了)
引用计数的含义:跟踪记录每个值被引用的次数。当声明了一个变量并将应用类型的值赋给该变量时,则这个值的应用次数是1.如果同一个值又被赋给另一个变量,则这个值的引用次数加1.相反如果这个值引用的变量又取得了另外一个值,则这个值的引用次数减1.当引用次数变为0时,说明该值无法被访问,垃圾回收器将其回收。
(3)管理内存
而优化内存的最佳方式,就是为执行中的代码只保存必要的数据。一旦数据不再有用,最好将其值设置为null来释放其引用——这个做法被叫做解除引用。
适用于:全局变量和全局对象的属性。局部变量会在他们离开执行环境时自动解除引用。
基本数据类型:Boolean、String、Null、Undefined、Number
引用类型的值是对象,保存在堆内存中。
基本类型的值,被保存在栈内存中。
包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针。
判断基本类型使用:typeof,判断引用类型使用:instanceof
二、引用类型
引用类型:Object、Array
1、Object
创建方法:
构造函数 var obj = new Object();
对象字面量: var obj={
name:“xx”,
age: “xxx”
}
访问对象属性时注意:如访问name属性
person[“name”] //记得带上引号
person.name //以下两种皆可以
2、Array
创建方法:
(1)构造函数
var colors = new Array();
(可以省略new 关键字)
(2)数组字面量
var colors = [“red”,“blue”,“green”]
有一点需要注意:如果
var arr=[]
arr[6]=“xx”
console.log(arr.length) // 7
前六个都会是undefined,且数组长度为7
其次需要注意array的length并不只是可读的如
var num=["0","1","2"];
num.length=2;
console.log(num[2]) //undefined
检测数组的方法:
(1)instance of(value)
(2)Array.isArray(value) // 如果是数组则返回true
栈方法:
push方法和pop方法
(1)push在末尾添加数组
(2)pop方法则从数组末尾移除最后一项,并返回末尾的值
shift方法和unshift方法
(1)shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
(2)unshift()方法,可向数组的开头添加一个或更多元素,并返回新的长度。
使用shift与push实现队列(先进先出)操作
var num = new Array();
var count = num.push("1","2");
num.shift();
使用unshift与pop实现栈的操作(先进先出)
var num = new Array();
var count = num.unshift("1","2");
num.pop();
重排序方法
reverse() //倒叙
sort() //按照升序排列数组
操作方法:
(1)concat(链接):基于当前的数组项创建一个新的数组,他可以将两个数组拼接起来
例子:
var num01=["1","2","3"];
var num02=num01.concat("4")
console.log(num02) // 1, 2,3,4
(2)splice(截取):可以传递一个或两个参数
只有一个参数:此方法返回从该参数指定位置到当前数组末尾的所有项
两个参数:返回起始和结束位置之间的项(但不包括结束位置的项)
同时此方法可以接受负值,负值则代表倒数的意思
(3)splice(插入)
他同时具备删除,插入,替换等
(1)删除:splice(0,2)代表从第0项开始删除2项
(2)插入:splice(2,0,“xxx”) 代表从第2项开始,删除0个项,插入xxx,后面可以跟多个项
(3)替换:和插入类似
splice(2,1,“xxx”)将第2项后面的1项替换为xx
位置方法:indexOf(),lastIndexOf()
参数:要查找的项表示查找起点的位置索引
indexof从前面查找,lastindexof从后方开始查找,若都未找到则返回-1