基础数据类型:number、string、boolean、undefined、null
引用(复杂)数据类型:Array、function, Object
结论:简单类型存储的是值本身,复杂类型存储的是地址,如果把第一个对象赋值给另一个变量,此时两个变量会指向同一个对象。
栈内存:存放地址; 堆内存:存放地址指向的值;
不同类型的数据 进行比较 需要有转化 。具体规则 见下表:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness#%E4%B8%A5%E6%A0%BC%E7%9B%B8%E7%AD%89
数组操作的方法:
splice : 数组任意地方删除或者添加元素
splice(start, deletedCount) 删除元素
splice(start, deletedCount , item) 删除+添加, 第三个参数是在原来删除的位置上新加几个元素
splice(start, 0 , item) 就是在某个位置新加元素
array.push(元素);//从后面添加元素,返回新数组的length
array.pop();//从数组的后面删除元素,返回删除的那个元素
array.unshift(元素);//从数组的前面的添加元素,返回新数组的长度
array.shift();//从数组的最前面删除元素,返回删除的那个元素
-- 添加的都是返回长度
-- 删除的都是返回删除的元素
数组的拼接:concat:数组合并,不会影响原来的数组,会返回一个新数组。
数组的排序:array.sort(); //数组的排序,默认按照 字母/首字符 顺序排序
数组的反转:array.reverse(); //翻转数组
数组和字符串的转换:array.join(分隔符) //作用:将数组的值拼接成字符串,并且返回字符串
split:将字符串分割成数组(很常用)
新增的数组方法:
indexOf 查找某个元素在数组中第一次出现的位置;
语法:arr.indexOf(元素,[开始查找的起始下标]); # 返回值:如果找到了,就返回这个元素在数组中的下标,如果没有找到,就返回-1;
lastIndexOf(值) 通过数组的值获取相对应的下标出现的最后一次位置
every(function(值,下标,数组){}) 判断数组中的每一个值是否满足需求
some(function(值,下标,数组){}) 判断数组中的至少有一个值是否满足需求
forEach 用于遍历数组;这个方法没有返回值,纯粹的读操作,也不会改变原来数组的值。
语法:
arr.forEach(function(值, 下标, 当前数组){
// 代码段
});
var arr = ['a', 'b', 'c'];
// forEach有2个参数:
// callback : 支持3个参数
// thisArg : 指定回调函数的this指向
arr.forEach(function callback(item, index, arr) {
console.log(this == arr); // true
console.log(item, index);
}, arr);
map 遍历数组,并将每个元素传入回掉函数中处理后,返回新的数组,。(这个方法主要用于以同样的规则处理数组中的每个值,并组成新的数组返回)
语法:
arr.map(function(值,下标,当前数组){
// 对v进行处理并返回处理后的每个v组成的数组
});
// map也自带遍历,遍历过程中 需要你返回一个新值 作为新数组中的元素
var newArr = arr.map(function (item, index, arr) {
// 回调函数 要求有返回值
// return 1;
// 基于原有值 修改,返回新值
return item.toUpperCase();
});
console.log(newArr);
filter 遍历数组,根据过滤条件,筛选出数组中满足条件的元素,组成新数组并返回。(使用方法和功能跟map方法很像,只是运行规则不一样。map方法中的函数,用于返回新的元素,而filter方法中的函数,根据返回true或false来筛选元素)
语法:
arr.filter(function(值, 下标, 当前数组){
// 筛选条件
});
reduce 归并,其中调用回掉函数,回掉函数中有两个参数,第一个参数是上一次操作的返回值,第二个参数是从第二个元素开始到最后一个元素。
语法:
arr.reduce(function(prev,next){
// 逻辑代码
});
常见的伪数组:arguments、nodeList、htmlCollection
冒泡排序
相邻两个元素进行比较,将一个数组中的数字使用循环进行升序或降序的排列。
选择排序
降序:先找最大值,排在最左边,再找第二大的值,往左边靠...,已经排好的,不再参与比较