JavaScript(3)__Js基础<数组>
1:数组的定义
1:定于并且赋值,定义要用的中括号
2:先定义,再赋值
2:数组的键名
JavaScript语言规定,对象的键名一律为字符串,所以,数组的键名其实也是字符串。之所以可以用数值读取,是因为非字符串的键名会被转为字符串。
3:数组的length长度
1:只要是数组,就一定有length属性。该属性是一个动态的值,等于键名中的最大整数加上1。
2:数组的数字键不需要连续,length属性的值总是比最大的那个整数键大1。另外,这也表明数组是一种动态的数据结构,可以随时增减数组的成员。
3:length属性是可写的。如果人为设置一个小于当前成员个数的值,该数组的成员会自动减少到length设置的值。
4:将数组清空的一个有效方法,就是将length属性设为0。
5:当length属性设为大于数组个数时,读取新增的位置都会返回undefined。
6:如果人为设置length为不合法的值,JavaScript会报错。
7:值得注意的是,由于数组本质上是对象的一种,所以我们可以为数组添加属性,但是这不影响length属性的值。
上面代码将数组的键分别设为字符串和小数,结果都不影响length属性。因为,length属性的值就是等于最大的数字键加1,而这个数组没有整数键,所以length属性保持为0。
8:如果数组键名是添加超出范围的数值,该键名会自动转换为字符串
上面代码中,我们为数组arr添加了两个不合法的数字键,结果length属性没有发生变化。这些数字键都变成了字符串键名。最后两行之所以会取到值,是因为取键值时,数字键名会默认转为字符串。
9:检查某个键名是否存在的运算符in,适用于对象和数组
注意,如果数组的某个位置是空位,in运算符返回false。
4:数组的遍历
1:for ... in 循环和数组的遍历
2:其他遍历方式:
5:常见方法
2:valueOf,toString
valueOf:返回数组本身值
toString:字符串值
3:push(在末尾添加一个或者多个) pop(在末尾删除一个)
push方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
pop方法用于删除数组的最后一个元素,并返回该元素。注意,该方法会改变原数组。
4:shift(删除第一个元素,并且返回该元素)
shift方法用于删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组。
shift方法可以遍历并清空一个数组。
5:unshift方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
unshift方法可以在数组头部添加多个元素。
6:reverse方法用于颠倒数组中元素的顺序,返回改变后的数组。注意,该方法将改变原数组。
7:slice方法用于提取原数组的一部分,返回一个新数组,原数组不变。
它的第一个参数为起始位置(从0开始),第二个参数为终止位置(但该位置的元素本身不包括在内)。如果省略第二个参数,则一直返回到原数组的最后一个成员。
上面代码中,最后一个例子slice没有参数,实际上等于返回一个原数组的拷贝。
如果slice方法的参数是负数,则表示倒数计算的位置。
如果参数值大于数组成员的个数,或者第二个参数小于第一个参数,则返回空数组。
8:splice(删除数组,插入新数据)
splice方法用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。
splice的第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
注意点:
起始位置如果是负数,就表示从倒数位置开始删除。
如果只是单纯地插入元素,splice方法的第二个参数可以设为0。
如果只提供第一个参数,等同于将原数组在指定位置拆分成两个数组。
9:数组的排序(sort)
sort方法对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。
10:indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。
indexOf方法还可以接受第二个参数,表示搜索的开始位置。
lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。
11:join方法以参数作为分隔符,将所有数组成员组成一个字符串返回。如果不提供参数,默认用逗号分隔。
小练习:如何用算法实现join函数?
//实现join函数
vararr = [1, 2, 3, 4];
//定义一个空串:目的是为了取出数组中的元素编程字符串
varstr = "";
vars1 = "-"
for(var i = 0; i < arr.length; i++) {
str += arr[i];
if (i == (arr.length - 1)) {
break;
}
str += s1;
}
console.log(str);
13:forEach遍历
将数组中的每一个元素拿出并且输出
var age = [40,20,10,30];
age.forEach(function(v) { //forEach 只遍历数组,不能break return 。 console.log(v); //40,20,10,30
});
14:map:返回一个新数组(调用了map中的函数操作后产生的数组)
var num =[3, 8, 10];
//map函数:返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组
varnumDouble = num.map(function(x) {
return x * 2;
});
console.log(numDouble); //numDouble是转换后的新数组 6,16,20
console.log(num);//原数组没有发生变化
问:用算法实现map函数?
var a =[1,2,3,4];
var n =[];
for(var i= 0;i<a.length;i++){
n[i]= a[i]*2;
}
console.log(n);