1,数据类型之间存储的区别
我们的存储空间分成两种 栈 和 堆
- 栈: 主要存储基本数据类型的内容(number,string,boolean,undefind,null)
- 堆: 主要存储复杂数据类型的内容(Array,Object,function)
2,函数参数传递
基本数据类型和复杂数据类型的区别
- 因为复杂数据类型,变量存储的是地址,真实内容在 堆空间 内存储
- 所以赋值的时候相当于把 obj 存储的那个地址复制了一份给到了 obj2 变量
- 现在 obj 和 obj2 两个变量存储的地址一样,指向一个内存空间
- 所以使用 obj2 这个变量修改空间内的内容,obj 指向的空间也会跟着改变了
3. 数组的常用方法
push 是用来在数组的末尾追加一个元素
pop 是用来删除数组末尾的一个元素
unshift 是在数组的最前面添加一个元素
shift 是删除数组最前面的一个元素
splice 是截取数组中的某些内容,按照数组的索引来截取
splice(下标,元素个数)=> 用于删除元素
splice(下标,0,第三个参数)=> 用于插入元素,第二个参数为0是不会删除任何项
splice(下标,删除的项数,第三个参数)=> 用于替换元素
reverse 是用来反转数组使用的
sort 是用来给数组排序的
sort()方法在排列两位数以上数字的时候不会按照大小排列,而是根据位数去排列
sort()排序规律:
+ a-b 如果它的值为正数,就交换它们的位置
+ b-a 如果值为正数,交换它们的位置
说明:
+ sort()方法,在内部可以传递一个函数进去作为参数
+ 在传递进去的这个函数括号里面,可以写两个参数,一个是a,一个是b
+ a表示的是数组的第一个元素,b表示的是数组的第二个元素
+ a和b会随着方法的执行,会依次进行改变。在内部比较的时候,如果两个数字已经交换位置了,a和b继续表示后面的数组元素
concat 是把多个数组进行拼接
join 是把数组里面的每一项内容链接起来,变成一个字符串
indexOf 找到一个字符后,就把这个字符第一次出现的位置返回,不会返回其他的,只会返回一次下标,如果元素不存在返回-1
includes 判断数组中是否有元素存在,返回的是布尔值(true/false)
4.ES5常用数组遍历方法
forEach
- 和 for 循环一个作用,就是用来遍历数组的
- 语法:arr.forEach(function (item, index, arr) {})
item 参数1表示数组元素
index 参数1表示数组下标
arr 参数3表示数组本身(一般不用)
forEach()的时候传递的那个函数,会根据数组的长度执行
数组的长度是多少,这个函数就会执行多少回
map
和 forEach 类似,只不过可以对数组中的每一项进行操作,返回一个新的数组,会遍历当前数组,可以改变当前循环的值,返回一个新的被改变过值之后的数组(map需要return),一般用在处理需要修改某一个数组的值
map是映射的意思,一 一对应的意思,一般不会使用map来操作简单的数组
filter遍历和过滤
- 和 map 的使用方式类似,按照我们的条件来筛选数组
- 把原始数组中满足条件的筛选出来,组成一个新的数组返回
find
find()遍历数组返回数组中第一个满足条件的项
every
every:数组中是否每个元素都满足指定的条件, 全部满足返回true
some
some:数组中是否有元素满足指定的条件,只要有一个满足返回true
reduce
reduce() 方法接收一个方法作为累加器,数组中的每个值(从左至右) 开始合并,最终为一个值。
reduce(function(previousValue,currenValue,currentIntdex,arr)){
previousValue:上一个值,如果没有初始值存在,第一次遍历时previousValue就是初始值
currenValue:当前数组元素
currentIntdex:当前数组元素下标
arr:原数组