21.for 循环
for...in 和 for...of 的写法
-
for...in 循环的语法是这样的:
let peppaFamily = ["佩奇", "乔治", "猪妈妈", "猪爸爸"]; for (let i in peppaFamily) { console.log(peppaFamily[i]); } // 输出: // 佩奇 // 乔治 // 猪妈妈 // 猪爸爸
for...in 循环会访问数组中的每一项,这里的 i 对应数组中每一项的下标。
for...in 不但可以循环数组,还能循环对象。
-
for...of 循环
let peppaFamily = ["佩奇", "乔治", "猪妈妈", "猪爸爸"]; for (let item of peppaFamily) { console.log(item); } // 输出: // 佩奇 // 乔治 // 猪妈妈 // 猪爸爸
for...of 循环也会访问数组中的每一项,这里的 item 对应数组中每一项。
两者的区别:for...in 循环遍历的结果是数组元素的下标,而 for...of 遍历的结果是元素的值。
22.while循环
注意:初始条件写在 while 循环外,更新条件的表达式写在执行内容里。
do...while 循环
while 循环有两种写法:while 和 do...while。
两者的区别在于先判断还是先执行:
写法一:while 先判断,后执行。 写法二:do...while,先 “do” (执行),后 while (判断)。
do...while 的语法如下:
同样的:初始条件写在 while 循环外,更新条件的表达式写在执行内容里。
但因为 do...while 是先执行后判断的,所以一定会执行一次 do 之后的内容。比如:
let i = 0; do { console.log(i); // 输出:0 i++; } while (i < 0 );
23.跳出循环 break/continue
跳出整个循环:break
break 的作用就是跳出循环,不管循环有没有结束都不会再继续下去,而是直接执行循环之后的语句。
跳过某次迭代:continue
break 和 continue 的区别
break 是终止整个循环,而 continue 是结束当前迭代,进入下一次迭代,并不会终止循环。
注意点:(当continue结束时,再次循环的时候仍然是continue时候的值,所以需要 i++.
let num = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368]; let i = 0; while (i < num.length) { if (num[i]%5 === 0) { // 用 continue 跳出符合条件的这一次迭代 console.log("跳过了第" + (i + 1) + "个数:" + num[i]); i++; continue; } const handledNum = num[i] / 5; console.log(handledNum); i++; } // 循环之后的语句 console.log("循环之后的语句");
这里要注意一下,因为 while 循环中,i++ 是放在“{}”中执行的,所以在执行 continue 之前要先执行 i++ 哦,不然会陷入死循环的。
24.random随机数
获取随机数 Math.random() [0,1)
下面这句代码中的 Math.random() 就是 js 的内置函数。Math 是一个内置对象,用于执行数学任务。
const num = Math.random();
通过上面这行代码,我们可以获得一个范围在 [0, 1) 之间的随机数。即从0(包括0)往上,但是不包括1(排除1)。
Math.floor(x)
js内置方法,返回小于 x 的最大整数。比如,Math.floor(2.3) 返回 2,Math.floor(4.9) 返回 4。
25.函数的声明/调用
(((声明+++调用)))
1. 用 function 命令声明
2. 用函数表达式声明
函数表达式声明函数的格式如下:
两种声明方式的区别
-
结尾的大括号后是否需要加“;”:
-
function 命令声明:结尾的大括号后不需要加“;”
-
函数表达式:结尾的大括号后需要加“;”
-
有无声明提升:(声明与调用能否互换)
-
function 命令声明:有提升;
-
函数表达式:没有提升;
因为函数表达式是一个表达式,所以要加“;”。总的来说两种声明方式的区别还是比较小的。
注意:以上代码中的符号,比如引号、括号、分号等均为英文状态下的符号。
函数的重复声明
如果同一个函数被多次声明,后面的声明就会覆盖前面的声明。
function print() { console.log("JavaScript 真有趣"); } function print() { console.log("JavaScript 真有趣...个鬼嘞"); } print();运行结果:
JavaScript 真有趣...个鬼嘞
前一次声明在任何时候都是无效的,这一点要特别注意。
立即执行函数
当函数只使用一次时,通常使用IIFE (Immediately Invokable Function Expressions):
(function() { console.log("这个函数只执行一次"); })();
它会在函数声明后立即调用函数,除这一次调用外因为是匿名函数,所以无从调用。
26.函数的参数
函数可以接受多个参数,多个参数以“,”(英文逗号)分隔:
// 参数 figure(位数) txt(文本) function code(figure, txt) { const num1 = Math.random() * 0.9 + 0.1; const num2 = Math.floor(num1 * Math.pow(10, figure)); console.log(txt + num2); } code(6, "六位随机数:");打印结果:
六位随机数:556540
27.Math.pow(x,y)
Math.pow(x,y) 是js内置方法,求取 x 的 y 次幂。比如,Math.pow(10, 4) 的计算结果为 10000。
28.return 返回值
return xxx;
xxx 对应的是需要结果的函数。
// 参数 figure(位数) function code(figure) { const num1 = Math.random() * 0.9 + 0.1; const num2 = Math.floor(num1 * Math.pow(10, figure)); // 用“return”把生成的随机数作为函数的结果返回 return num2; } let result = code(6); console.log(result);
注意:在函数中遇到return语句,就直接返回return后面的那个表达式的值,后面即使还有语句,也不会被执行。
29.abs 绝对值
30.数据类型判断
let num = 4; typeof num; // number let str = "优课达"; typeof str; // string typeof num === 'number' // true