目录
1.Array数组
(1)简介
(2)数组的基本操作
(3)数组的遍历
a. 普通数组的遍历
b.对象数组的遍历
(4)数组对象常用方法
2.基本/引用数据类型函数调用区别
1.Array数组
(1)简介
- 数组时存放一组数据,长度可变的有序集合
- 索引: 从0开始, 空数组索引无效
- 稀疏数组, 其中含有undefined的元素(无内容)
(2)数组的基本操作
- 定义数组(自变量方式): var 数组名 = [ ]
- 添加元素: 数组名[ 索引 ] = 值
- 获取元素: 数组名[ 索引 ]
- 修改元素: 数组名[ 索引 ] = 值
- 删除元素: delete 数组名[ 索引 ]
- 获取数组长度: 数组名.length
// 数组 存放一组数据的集合, 存放多个数据, 有序的数据集合, 长度可变的数组// 索引: 从 0 开始, 数组索引最大为 数组名.length - 1 空数组索引无效// 稀疏数组 定义数组时,其中有的元素没有内容 undefined// 定义数组 (自变量的方式)var arr1 = []var arr2 = ['mm', 'tt', 'zz']// 向数组中添加元素 通过索引arr1[0] = 10arr1[1] = 20arr1[10] = 100// 稀疏数组console.log(arr1) // [10, 20, empty × 8, 100]// 获取数组中指定位置的元素 通过索引console.log(arr1[1]) //20console.log(arr1[5]) //undefined// 获取数组长度 数组名.lengthconsole.log(arr2.length) //3// 修改某元素 数组名[索引] = 值arr1[0] = 1000console.log(arr1[0]) // 1000// 删除某元素 使用delete 删除的是内容, 位置没有删掉, 变为undefineddelete arr1[1]console.log(arr1) //[1000, empty × 9, 100]
(3)数组的遍历
a. 普通数组的遍历
- for-in遍历, 将数组看作对象遍历
- for循环遍历每个元素
// 遍历数组// 方式1: for-in 将数组看作对象,索引对应键key,元素为值 只会遍历打印有值的数据for (var key in arr1) {console.log(arr1[key])}// 方式2: for 遍历每个元素for (var i = 0; i < arr1.length; i++) {if (arr1[i] !== undefined) {//排除稀疏数组的空元素console.log(arr1[i])}}
b.对象数组的遍历
// 对象数组var objArr = [{ name: '中' }, { name: '美' }, { name: '英' }]for (var i = 0; i < objArr.length; i++) {console.log(objArr[i].name)}console.log('================================')var objArr11 = [{ fruits: ['apple', 'pear'] },{ vegetable: ['tomato', 'potato'] },]for (var i = 0; i < objArr11.length; i++) {// obj11 接收 objArr11数组中的对象var obj11 = objArr11[i]console.log('objArr11------', objArr11[i])// 遍历对象for (var key in obj11) {// 接收对象中的值(数组)var arr11 = obj11[key]console.log('obj11---------', obj11[key])// 遍历最里层的数组for (var j = 0; j < arr11.length; i++) {console.log('arr11------------', arr11[j])break}}}
(4)数组对象常用方法
Array | 对数组的内部支持 |
Array.concat( ) | 连接数组 |
Array.join( ) | 将数组元素连接起来以构建一个字符串 |
Array.length | 数组的大小 |
Array.pop( ) | 删除并返回数组的最后一个元素 |
Array.push( ) | 给数组添加元素 |
Array.reverse( ) | 颠倒数组中元素的顺序 |
Array.shift( ) | 将元素移出数组 |
Array.slice( ) | 返回数组的一部分 |
Array.sort( ) | 对数组元素进行排序 |
Array.splice( ) | 插入、删除或替换数组的元素 |
Array.toLocaleString( ) | 把数组转换成局部字符串 |
Array.toString( ) | 将数组转换成一个字符串 |
Array.unshift( ) | 在数组头部插入一个元素 |
var array1 = [1,2,3]var array2 = [4,5,6]var array3 = [7,[8,'a']]// length 属性 获取数组长度console.log(array1.length) // 3// 数组常用方法 ()方法/函数 // 1. concat() 拼接数组 或 向数组中添加元素,并返回新数组var newArr1 = array1.concat('c','d')var newArr2 = array1.concat(array2).concat(array3).concat(9, 10)console.log(array1) // [1, 2, 3]console.log(array2) // [4, 5, 6]console.log(array3) // [7, Array(2)]console.log(newArr1) // [1, 2, 3, 'c', 'd']console.log(newArr2) // [1, 2, 3, 4, 5, 6, 7, Array(2), 9, 10]// 2. join() 将数组拼接为字符串, 元素间默认以,分隔console.log(array1.join()) // 1,2,3console.log(array1.join("")) // 123// 3. push() 向原数组尾部添加元素array2.push('d','e','f')console.log(array2) // [4, 5, 6, 'd', 'e', 'f']// 4. pop() 删除原数组尾部的元素, 返回删除元素值console.log(array2.pop()) // fconsole.log(array2) // [4, 5, 6, 'd', 'e']// 5. unshift() 原数组头部添加一个或多个元素(从右往左加,后加的在最前), 返回数组长度console.log(array2.unshift('111','222')) // 7console.log(array2) //['111', '222', 4, 5, 6, 'd', 'e']// 6. shift() 移出数组头部元素, 返回移出的元素console.log(array2.shift()) // 111console.log(array2) //['222', 4, 5, 6, 'd', 'e']// 7. reverse() 反转数组,返回新数组console.log(array2.reverse()) // ['e', 'd', 6, 5, 4, '222']console.log(array2) // ['e', 'd', 6, 5, 4, '222']//8. sort() 排序, 默认按字母序排列console.log(array2.sort()) // ['222', 4, 5, 6, 'd', 'e']console.log(array2) // ['222', 4, 5, 6, 'd', 'e']//9. slice(startIndex, endIndex) 分割范围数组,并返回, 不改变原数组 [startIndex, endIndex)console.log(array2.slice(0,2)) //['222', 4]console.log(array2.slice(1, -1)) // [4, 5, 6, 'd']console.log(array2) // ['222', 4, 5, 6, 'd', 'e']var array4 = ['piano','erHu','suona']// 10. splice(start, delCount, value...) 插入,删除,替换数组元素 start开始位置, delCount删除几个, value值// 索引为 0 的位置添加元素console.log(array4.splice(0,0,'guitar','guzheng')) //没有返回值 console.log(array4) //['guitar', 'guzheng', 'piano', 'erHu', 'suona']// 删除某索引位置的值(可删除多个值)console.log(array4.splice(1,2)) //['guzheng', 'piano'] 返回删除的片段console.log(array4) // ['guitar', 'erHu', 'suona']// 替换某几个位置的几个元素console.log(array4.splice(1,2,'333','444')) //['erHu', 'suona'] 从索引为1的位置开始,替换2个console.log(array4) // ['guitar', '333', '444']
2.基本/引用数据类型函数调用区别
- 基本数据类型函数调用是传值调用
- 引用数据类型函数调用是传地址调用
// 传值调用// 将交换步骤封装为一个方法function swap1(num1, num2) {console.log(num1, num2) // 10 20var temp = num1num1 = num2num2 = temp// 交换的是 num1 和 num2, 与a,b无关console.log(num1, num2) //20 10}// 传值调用 基本数据类型数字交换// 基本数据类型中,每一个变量名指向内存空间中的具体值,函数调用传递的仅仅是值, 形参的改变不影响实参 a,b,num1,num2互不相关, num1与num2值交换与a,b无关var a = 10,b = 20swap1(a, b)console.log(a, b) // 10 20// 传地址调用// arr数组 i,j要交换的索引function swap(arr, i, j) {console.log(arr[i], arr[j]) // 1,3var temp = arr[i]arr[i] = arr[j]arr[j] = tempconsole.log(arr[i], arr[j]) // 3,1}// 传地址调用 引用数据类型// 引用数据类型中, 变量名指向内存中的地址, 函数调用是将地址传递,故不同的变量名指向同一个地址, 当其中一个变量指向的内容发生变化时, 另一个也会变 形参的改变影响实参var arrs = [1, 2, 3]swap(arrs, 0, 2)console.log(arrs[0], arrs[2]) //3,1