/** 数组
* 数组: 存放一些数据的集合
* 也是引用数据类型(复杂数据类型)
* 数组/对象/函数
数组是一个紧密型结构
* 当将数组中指定下标位置的元素删除或者添加时,都会引起这个位置之后元素的位置变动
*
* 数组和对象将来如何选择?
* 示例:
* 商品的详情存放到某一个对象中, 比如: 商品名, 商品价格, 商品折扣, 商品描述....
*
* 商品列表假设有 100个商品, 那么你就有100个商品详情, 按照上述的封装那么你有100个对象
* 我们可以将 这 100个 对象, 存放到某一个数组中, 进行维护管理
*/
数组的长度介绍
* 数组的长度并固定, 取决于数组内部有多少个元素
* 查看方式:
* 1. 打印数据, 在控制台展开数组, 找到最后的length
* 2. 打印 数组名.length
*
* 当 数组的 长度 === 0 代表当前数组为空数组
var arr = ["a", "b", "c", "d", "e"];
console.log(arr.length);//数组的长度,当前数组中有多少个元素
arr.length是一个可读可写但是不能删除的属性
console.log(arr.length)
数组的索引(下标)
*
* 有什么用?
* 表明 数组 的这个位置上 有什么内容
*
* 注意:
* 下标是固定的, 永远是 0 1 2 3 4 5 ....
* 但是下标对应的内容, 不是固定的
*/
var arr = [1, 2, 3, 4, 5]
// 下标: 0 1 2 3 4
console.log('原数组: ', arr)
// console.log(arr[0]) // 会得到当前数组下标0这个位置上的值 1
// console.log(arr[3]) // 会得到当前数组下标0这个位置上的值 4
// 通过数组的下标, 我们也可以修改数组中某一个元素的内容
arr[2] = '新的数据'
console.log('修改后的数组: ', arr)
// var arr1 = [100, 200, 'QF004', true]
// var arr2 = [5, 4, 3, 2, 1]
// console.log(arr1)
// console.log(arr2)
数组长度特点1
1 当长度变的比原来小的时候,多余的元素就会被删除
arr.length=3;
console.log(arr);
2 当新长度大于原来数组的长度时,会在数组后天添加对应多余的空元素
arr.length=10;
console.log(arr);/、
3 删除最后一个元素
arr.length--;
4 在数组尾部添加一个空元素
arr.length++;
5 数组中最大下标值 是长度-1
将数组的最后一个元素替换为z
arr[arr.length-1]="z";
console.log(arr);
在数组的尾部添加一个新元素“z”
arr[arr.length]="z";
console.log(arr)
数组长度特点2
var arr=["a","b","c","d","e","f"];
1、将数组中最后两个元素删除
arr.length-=2;
2、给数组最后添加一个"z"
arr[arr.length]="z";
3、将数组的最前面的一项替换为"0"
arr[0]="0"
4、将数组的所有元素清空
arr.length=0;
// 不要使用 arr=[]这是改变引用地址,不是清空原数组,会造成泄漏
创建数组
数组创建
字面量创建数组
var arr=[1,2,3,4];
arr[4]=5;
2. 内置构造函数的方式创建
var arr=new Array(1,2,3,4,5,6);
console.log(arr);
如果使用 new Array创建数组时,只写了一个参数,并且这个参数是数值型
1、这个参数是一个正整数的时候,则表示创建了一个这个整数为长度的空元素数组
2、这个参数如果是一个负数或者一个小数,NaN,则会报错Uncaught RangeError: Invalid array length 范围错误,无效的数组长度
3· 如果使用new Array创建数组时,只写一个参数,并且这个参数不是数值类型,则表示创建一个长度数组,这个参数即为这个数组中的第0项元素
var arr=new Array(5);
var arr=new Array(-2);
var arr=new Array(1.2);
var arr=new Array("5");
var arr=new Array(NaN);
var arr=new Array(true);
console.log(arr);
这种不写new和写new的一样
var arr=Array(6);
关于数组与空元素
1. 数组中添加一个空元素,最后这个空元素将不会记录长度
var arr=[1,2,3,,,];
console.log(arr.length);
var arr=[,];
console.log(arr.length)
var arr=[,,];
console.log(arr.length)
2. 空元素 不是undefined,但是空元素与undefined相等
var arr=[1,,2];
console.log(arr[1]===undefined);// true
var arr=[1,undefined];//2
var arr1=[1,];//1
console.log(arr.length,arr1.length)
数组遍历
需求: 拿到数组各个位置上的值
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2]
// 下标 0 1 2 3 4 5 6 7 8 9
// console.log(arr[0])
// console.log(arr[1])
// console.log(arr[2])
// for (var i = 0; i <= arr.length - 1;) {
for (var i = 0; i < arr.length; i++) {
// console.log(i)
console.log(arr[i])
}
数组遍历 与空元素
var arr = ["a", "b", "", undefined, , "c", 0, "d"];
// 空元素不是undefind ,打印出来表现为undefind。
1. for in遍历数组时,不会遍历空元素,如果当前数组有属性(比如创建arr.a=10)那么这个a也会被遍历到
// for(var key in arr){
// console.log(arr[key])
// }
//但 为什么for in不会遍历空元素
2. // for in循环遍历时考虑是对象遍历,对象典型特征是键值对 键 值对应 数组中的空元素 只有键名没有值,不是键值对,只有键名 for in就不会遍历
var obj={a:1,b:2,c:3};
console.log("a" in obj);//"a"是obj对象的一个属性,并且是键值对存在
console.log("d" in obj);
var arr=[1,,2];
console.log(0 in arr);//把数组arr看做一个对象的话,下标0是不是这个对象的属性
console.log(1 in arr);//空元素,判断下标1是不是数组的属性,false 表明是个空元素
console.log(2 in arr);
console.log(3 in arr);
// 判断数组中这个下标对应的元素是不是空元素 if(下标 in arr){ }
3. 数组遍历 与空元素
// 遍历数组时,不遍历空元素
var arr = ["a", "b", "", undefined, , "c", 0, "d"];
for(var i=0;i<arr.length;i++){
if(i in arr){
console.log(i,arr[i]);
}
}
数组遍历 去掉空数组 结果
二、delete关键字 删除 创建空元素方法
1. var arr = [1, 2, 3, 4, 5]
arr.length++
console.log(arr);
2. var obj = { a: 1, b: 2, c: 3 }
console.log(obj);
删除对象下的属性a
delete obj.a
console.log(obj);
var arr = [1, 2, 3, 4]
// 当使用delete删除数组中的某个下标对应的元素时,就会使这个下标对应的元素变为空元素
// 不是删除这个元素,所以不会改变数组的长度,不会造成后面的元素向前移动
// delete arr[0]
// console.log(arr);
delete arr[arr.length - 1]
console.log(arr.length, arr);