# 一、复习
1、函数的概念
2、函数的特点
5、函数的执行
6、事件分类
7、函数的-入口
8、arguments
9、函数的返回值-出口 返回值return 返回任何值,同时结束代码
10、作用域
11、声明提升 函数的整体提升
12、递归 类似循环:消耗性能
13、对象:构造函数
- 概念
- 意义
- 本质
- 创建:字面量、构造函数
- 操作
- 增删改查
- 分类
# 三、对象 - 数组
1、object对象:数据的无序集合,本质是键值对,都是数据的打包
2、array数组:数组,数据的有序集合,本质是有索引(下标)的数据,都是数据的打包
- 一组数据的组合
- 有序、索引、下标:0~数组的length-1
- 长度、个数、length
- 配合循环快速解析数组中的所有数据
3、创建数组
- 字面量:var arr= []
- 构造函数:var arr = new Array();
- 区别:当且只有一个数值行数据时,字面量认为这就是一个数据,构造函数认为这是长度
4、数组的操作
- 索引+长度
- 增:数组的增其实只是在增加长度,增加长度之后,再给新增加的位置赋值(原则上来说只能在数据的最后新增)
- 删:数组的删其实只是在缩小长度,缩小长度之后,(原则上来说只能在数据的最后开始删除)
- 改:重新赋值,找到索引的位置赋值即可
- 查:根据索引直接查去数组中的数据
- 方法操作
- 方法:属于某个对象的函数,数组的方法:属于数组对象的函数
- 语法、功能、参数、返回值,是否改变数据
-数组.push()
- 最后新增
- 要更新的数据
- 新增之后的数组长度
- 改变原数据
-数组.shift()
- 删除开头
-
-数组.unshift()
- 首位新增
-数组.pop()
- 末尾删除
-数组.slice()
- 截取指定
- 从参数1截取到参数2的前一位的数据,返回值是截取出的新数组,没有改变原数组
-数组.splice()
- 删除并替换
- 参数1:开始删除的位置,参数2:删除的个数,参数3:要插入到到删除位置的数据
-数组.sort()
- 排序
-数组.reverse()
- 反转
-数组.concat()
- 合并数组,如果参数是数组会被展开
-数组.join()
- 传入的参数替换逗号,并且全部转换成一连串的字符
-数组.sort()
- 按照字符排序
- 加入函数之后按照数字排序
- // 排序
`// 按照字符排序
var arrs = [54,85,9,5,74,31,8];
// var arr2 = arrs.sort();
//按照数字排序
var arr2 = arrs.sort(function(a,b){
return a - b; //从小到大
return b - a; //从大到小
});`
-includes()
- 函数用来判断一个数组是否包含一个指定的值,包含则返回true,否则false
`<link rel="stylesheet" href="../../../2月/2周/22、2、28/数组的操作.html">`
5、数组的分类
- 数组是一组数据的组合,一个数组中,尽量存储同类的数据
- 全是字符的数组是字符数组 ....,数值数组 .....布尔数组
- 复杂数组
- 全是对象的数组,json数组
[{name:'edw'},{name:'effefr'},{name:'rerfef'},{name:'rerere'}]
- 全是数组的数组,二维数组=多维数组
[[45,2],['evf','re'][5,5,8]]
- 复杂数组逐层解析
6、关于计算机的存储机制
- 栈:用来存储指定数据所在的堆空间的地址,空间小、稳定、不可修改
- 堆:用来存储具体的数据,空间大、灵活、可以被修改
- 栈和堆:一一对应,可以一对一,可以一对多,不可以多对一
7、根据数据在内存中的存储数据形式划分
- 引用传递的数据:复杂数据,在内存中,变量存储在栈中,值存储在堆中,栈和堆通过地址产生联系
- 在赋值时,拷贝的是地址,导致了修改了新地址的值,不会影响原数据的值
- object,arry,function
- 值传递的数据:基本数据,在内存中,变量和值,都存储在栈中,不占堆空间
- 在赋值时,拷贝的是值导致了修改了新数据的值,会影响原数据的值
- string,number,Boolean,undefined,null
8、引用传递数据的拷贝方式
- 浅拷贝:只拷贝地址,修改新数据,会影响原数据
- 使用 = 赋值时,默认的时浅拷贝
- 深拷贝:不拷贝地址,只拷贝值,修改新数据,不会影响原数据
1、先解析引用传递的数据,解析成值传递的数据,再做拷贝
- 遍历之后逐个复制
- 数组采用循环遍历
- 对象采用for~in遍历
9、对象的遍历
- 对象是无序集合,不能使用循环直接遍历
- 要使用专属的遍历方式:for~in,遍历的是键(key)
for(var i in obj[i]){
// i就是obj的键
// obj[i]就是对应的值
}
var a = {name:‘tgbh’};
var a在内存中开辟了一个栈空间,起了个名字叫a
再在内存中开辟了一个堆空间,里面存储了给数据10,
= 表示堆空间的地址,存到了堆中
# 四、随机数
1、生成随机数:Math.random(),得到一个0~1之间的随机数,不包括0和1
2、范围随机数
function random(min,max){
return Math.round(Math.random()*(max-min)+ min)
}
Math.round取整(四舍五入)
<!-- 10万个数据如何提升性能
1、声明放在前面
2、提前计算好arr.length -->