一、循环
1、for
for 循环的语法如下:
for (语句 1; 语句 2; 语句 3) {
要执行的代码块
}
语句 1 在循环(代码块)开始之前执行。
语句 2 定义运行循环(代码块)的条件。
语句 3 会在循环(代码块)每次被执行后执行
2、for...in
for...in遍历对象,格式:
for (变量 in 对象){
循环体
}
使用for.....in循环里的循环变量习惯用key或k
// 遍历对象
var obj = {
name: 111,
age: 222,
sex: 111,
sayHi: function () {
console.log('hello');
}
}
for(var k in obj){
// k变量 输出的是属性名,Obj[k]是属性值
console.log(k);
console.log(obj[k]);
}
输出结果:
3、while
只要指定的条件为 true,while 循环会一直循环代码块。
语法
while (条件) {
要执行的代码块
}
4、do/while
do/while 循环是 while 循环的变体。该循环会执行一次代码块,在检查条件是否为真之前,然后如果条件为真的话,就会重复这个循环。同样当指定的条件为 true 时循环指定的代码块,但该循环在判断条件前会执行一次代码块
语法
do {
执行代码
} while (condition);
JavaScript 支持不同类型的循环:
5、两种关键字
Break语句
它被用于“跳出” switch 语句或跳出循环。break 语句会中断循环,并继续执行循环之后的代码(如果有)
例子:
输出为0,1,2
for(var i=0;i<6;i++){
if(i==3){
break; //跳出
}
console.log(i);
}
Continue 语句
continue 语句中断(循环中)的一个迭代,如果发生指定的条件。然后继续循环中的下一个迭代。
本例跳过值 3 :
例子:
输出0,1,2,4,5
for(var i=0;i<6;i++){
if(i==3){
continue; //继续执行后续循环
}
console.log(i);
}
二、数组
1、定义
数组是指一组数据的集合存存储在单个变量下的方式
在数组里可以放任意数据类型的数据,一定要用逗号隔开。
2、 数组长度
使用数组名.length 动态监测数组长度,数组的长度是元素个数。
数组长度 = 索引值 + 1
3、 创建数组
(1)利用new关键字创建数组
var arr1 = new Array(2); //实例化对象
var arr2 = [3,4,5,6];
(2)利用数组字面量[]创建数组,最常用
var arr2 = [3,4,5,6];
arr2.length = 3;
/arr2.length = 5;
[i]下标,从0开始,定义初始化数组,最好使用第二种方法,因为第一种方法括号内只写一个数字时,表示为该数组有两个空属性且数组长度为2的数。
4、获取 / 得到 / 访问数组元素
1、数组的索引(下标):用来访问数组的下标,从0开始。
格式:数组名[下标]
注意:访问时,下标超过数组长度,则多余的那个值为undefined。例:
var arr2 = [1,2,3]
console.log(arr[4])
//则arr[4]值为undefined
5、 遍历数组
遍历--就是把数组中的每一个元素从头到尾访问一遍
var arr = [0,1,2,3]
for(i = 0;i < 4, i++){
console.log(arr[i])
}
注意:数组索引号从0开始,所以i必须从0开始 i<3
输出的时候arr[i], i 是计数器当索引号来使用
6、 数组新增元素
(1)通过修改length长度新增数组元素(实现扩容目的)
var arr = [1, 2, 3, 4, 5]
arr.length = 7;
console.log(arr);
console.log(arr[6]);//输出undefined
输出结果:
(2)修改索引号,追加数组元素
var arr = [1, 2, 3]
arr[4] = 4;
console.log(arr);
console.log(arr[4]);
输出结果:
注意:不要给数组名直接赋值,如果赋值,数组中的元素将会都没有了
8、应用
//案例1:数组求和及平均值
var arr1 = [2,6,1,7,4];
var i ;
var sum = 0
for(i = 0;i < arr1.length;i++){
sum += arr1[i]
}
console.log(sum)
var averge = sum/arr1.length;
console.log(averge);
console.log(sum , averge)//连续输出多个变量,用逗号隔开
// 案例2:数组最大值
var arr2 = [2,99,1,77,52,25,7];
var max =arr2[0];
for(i= 1; i < arr2.length; i++){
if(max < arr2[i]){
max = arr2[i];
}
}
console.log(max);
//案例3:数组转换为分割字符串
//要求:将['red','green','blue','pink']转换为字符串,并且用|或其他符号分割
var arr = ['red','green','blue','pink'];
//自己--直接利用数据转换,不要使用String方法更简单,先令变量str为空字符串,然后运算时进行数据转换
var str =arr[0];
for(var i = 1; i < arr.length; i++){
var str =str+'|'+String(arr[i])
}
//方法2
var str = '';
var sep = '!';
//遍历数组获取原来的元素,加到字符串中,同时后边再加一个符号
for(var i = 0;i < arr.length; i++){
str += arr[i] +sep;
}
console.log(str)
//案例4:筛选数组
//将数组[ 2, 0, 1, 77, 0, 52, 0, 25, 7]中大于10的元素选出来,放入新数组
var arr = [ 2, 0, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
// var n = 0;
newArr.length = 0;
for(var i = 0; i < arr.length; i++){
if(arr[i] > 10){
// newArr[n]=arr[i];
//newArr.length可以代替数组下标
newArr[newArr.length]=arr[i];
// n = n + 1; 新数组的索引号要从0开始
//n = n+1;等效为 n++;
}
}
console.log(newArr)
//案例5:删除指定数组元素
//要求:将数组[2,0,6,1,77,0,52,0,25,7]中的0去掉后,形成一个不包含0的新数组
var arr = [2,0,6,1,77,0,52,0,25,7];
var newArr = [];
for(var i = 0;i < arr.length; i++){
if(arr[i] != 0){
// 数组索引号应该从0开始依次递增
newArr[newArr.length] = arr[i];
}
}
console.log(newArr)
// 案例6
// 要求:将数组['red','green','blue','pink','purple']的内容反过来存放
var arr = ['red','green','blue','pink','purple'];
var newArr =[];
// for(var i =0; i<arr.length;i++){
// newArr[i] = arr[arr.length-i-1] ;
// }
for(var i = arr.length-1;i >=0;i--){
newArr[newArr.length] = arr[i]
}
console.log(newArr);
三、伪数组
1、定义
即 arrayLike,也称为类数组。是一种按照索引存储数据且具有 length 属性的对象。因为是对象,所以不能调用[数组的方法],比如 forEach()、push() 等。
无法直接调用数组方法或期望lenyunsuangth属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。
- 典型的是函数的 argument参数,
- 像调用getElementsByTagName,document.childNodes之类的,它们都返回 NodeList
- 对象都属于伪数组。
2、获得伪数组元素集合
document . getE lementsByClassName("class值")通过class获得元素伪数组集合、
document. getE lementsByTagName("tagname" )通过标记名获得元素伪数组集合
3、常见的伪数组有哪些?
- 函数中的
arguments
test(1, 2, 3, 4);
function test() {
console.log(arguments); // expected output: [Arguments] { '0': 1, '1': 2, '2': 3, '3': 4 }
console.log(arguments.length); // expected output: 4
}
document.querySelectorAll()等批量选择元素的方法的返回值
const elements = document.querySelectorAll("div");
console.log(elements); // expected output: NodeList(4) [div, div, div, div]
<input/>文件上传后的files
<html>
<body>
<input type="file" name="file" id="input" onchange="fileChange()" />
</body>
<script>
// 选择文件后触发
function fileChange() {
console.log(document.querySelector("#input").files); // expeced output: FileList {0: File, length: 1}
}
</script>
</html>
4、如何将伪数组转换为数组?
- ES2015 新增的 Array.from() 方法
let a = {
0: "x",
1: "y",
2: "z",
length: 3,
};
let b = Array.from(a);
console.log(b); // expected output: [ 'x', 'y', 'z' ]
- 数组的 slice() 方法
let a = {
0: "x",
1: "y",
2: "z",
length: 3,
};
let b = [].slice.call(a);
let c = [].slice.apply(a);
console.log(b); // expected output: [ 'x', 'y', 'z' ]
console.log(c); // expected output: [ 'x', 'y', 'z' ]
- 数组的 concat() 方法
let a = {
0: "x",
1: "y",
2: "z",
length: 3,
};
let b = [].concat.apply([], a);
console.log(b); // expected output: [ 'x', 'y', 'z' ]
- 遍历伪数组的每一项,将其添加到一个新的数组
let a = {
0: "x",
1: "y",
2: "z",
length: 3,
};
let b = [];
for (let i = 0; i < a.length; i++) {
b.push(a[i]);
}
console.log(b); // expected output: [ 'x', 'y', 'z' ]