写在前面
SAST2020前端组授课——JavaScript基础学习教程系列
常见流程控制
if-else
1 | if ( someFactors ) { |
do-while、while
1 | while ( someFactors ) { |
当条件成立,继续执行,直到while的条件不成立。
1 | do { |
do-while
和while
的区别就在于,第一次迭代的时候,while
要先判断,do-while
会先执行,然后再判断是否满足条件。
for、for-in、for-of
for
:
1 | for (语句 1; 语句 2; 语句 3) { |
和C++一样
for-in
:枚举对象的属性,返回给迭代变量。
1 | for (x in Object){ |
如:
1 | var data = new Object({ |
for-of
在ES6中,增加了一个for of循环,使用起来很简单:
1 | array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; |
for in
总是得到对象的属性或数组、字符串的下标。
for of
是直接得到数组或字符串的值,但是不能对对象用。
break和continue
break
语句可以跳出当前的循环;
continue
用于退出当前循环返回循环起始继续执行如:获取所有偶数,所有奇数使用
continue
跳过
1
2
3
4 for (let i = 1; i <= 10; i++) {
if (i % 2) continue;
console.log(i);
}
switch
1 | switch(表达式) { |
- 计算一次 switch 表达式
- 把表达式的值与每个 case 的值进行对比
- 如果存在匹配,则执行关联代码
语法形式和C++等语言一样,但是不同于其他语言,JavaScript中的switch有自己的特性:
-
switch语句可以使用任意的数据类型(例如字符串和对象)
-
每一个case的值不仅仅可以是常量,还可以是变量和表达式
1
2
3
4
5
6
7
8
9
10
11var num = 10;
switch (true) {
case num <= 20:
console.log("<=20");
break;
case num > 20:
console.log(">20");
break;
default:
console.log("Out of order");
}
function
1 | function functionName (arg1, arg2, ..., argN) { |
函数调用:
函数中的代码将在其他代码调用该函数时执行:
- 当事件发生时(当用户点击按钮时)
- 当 JavaScript 代码调用时
- 自动的(自调用)
ECMAScript arguments 对象
JavaScript函数传递的参数和其他大多数语言的函数传参有所不同。JS不介意传递的参数的数量以及类型。
在JS的解释器执行中,函数的参数,是作为一个数组传递进去的,至于数组中有多少参数(如果有参数的话),在语句执行中,解释器是不会去关注的。
这个参数数组是内置的对象:arguments
例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,第二个参数位于位置 1,依此类推)。
因此,无需明确命名参数,就可以重写函数:
1
2
3
4
5
6
7
8
9
10
11 function sayHi() {
if (arguments[0] == "bye") {
console.log("GoodBye!")
return;
}
console.log(arguments[0]);
}
sayHi("hi");
sayHi("bye");
// hi
// GoodBye这个特点可以用来做什么?
传递参数动态化(可以用
arguments.length
查看传递的参数的个数)模拟函数的重载:
用 arguments 对象判断传递给函数的参数和类型,即可模拟函数重载:
1
2
3
4
5
6
7
8 function overLoadAdd() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(overLoadAdd(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));