判断选择

if 判断

判断条件,只要有条件成立,if里面的代码中其他的else if都不会执行。

  1. //单分支
  2. if(1<2){
  3. console.log(1);
  4. }
  5. //多分支
  6. if(1>2){
  7. console.log(1);
  8. }else{
  9. console.log(2);
  10. }
  11. if(1>2){
  12. console.log(1);
  13. }else if(3>2){
  14. console.log(2);
  15. }

switch-case 选择

选择一个分支开始执行,直到遇到break 后跳出整个swith选择(如case 2:,后面没有break,会继续执行到console.log(3);)。

如果没有相等的条件,就会执行defalt,这个是可选的,也可以没有。(推荐)

  1. switch(1){
  2. case 1:
  3. console.log(1);
  4. break;
  5. case 2:
  6. console.log(2);
  7. case 3:
  8. console.log(3);
  9. break;
  10. default:
  11. console.log(4);
  12. }

switch 语句可以用于所有数据类型(在很多语言中,它只能用于数值),因此可以使用字符串甚至对象。
其次,条件的值不需要是常量,也可以是变量或表达式。

switch 语句在比较每个条件的值时会使用全等操作符,因此不会强制转换数据类型(比如,字符串”10”不等于数值 10)。

  1. switch ("hello world") {
  2. case "hello" + " world":
  3. console.log("Greeting was found.");
  4. break;
  5. case "goodbye":
  6. console.log("Closing was found.");
  7. break;
  8. case num > 10 && num <= 20:
  9. break;
  10. default:
  11. console.log("Unexpected message was found.");
  12. }

==================

循环

while

判断条件,条件为真,就执行,然后循环,直到条件不成立,或者遇到break后停止循环

  1. var n = 1;
  2. while(n<10){
  3. console.log(n);
  4. n++;
  5. }

do while

先执行一次代码,然后:
判断条件,条件为真,就执行,然后循环,直到条件不成立,或者遇到break后停止循环

  1. var n = 1;
  2. do{
  3. console.log(n);
  4. n++;
  5. }while(n<10)

for

判断条件,条件为真,就执行,然后循环,直到条件不成立,或者遇到break后停止循环;
可以同时初始化多个值。

  1. for(n=1 ; n<10 ; n++){
  2. console.log(n);
  3. }

for in

遍历数组或对象的下标

数组是把下标当做属性遍历

  1. //数组
  2. var arr = [1,2,3,4,5,6];
  3. for(x in arr){
  4. console.log(arr[x]); //1 2 3 4 5 6
  5. }
  6. //对象
  7. var person={fname:"John",lname:"Doe",age:25};
  8. for (x in person) //x是属性名
  9. {
  10. txt = txt + ' ' + x; //txt = 'fname lname age' 属性名
  11. txt1=txt1 + ' ' + person[x]; //txt1 = 'John Doe 25' 属性值
  12. }
  13. //可以过滤掉继承的属性
  14. var o = {
  15. name: 'Jack',
  16. age: 20,
  17. city: 'Beijing'
  18. };
  19. for (var key in o) {
  20. if (o.hasOwnProperty(key)) { //对象的属性是无序的,因此 for-in 语句不能保证返回对象属性的顺序。
  21. console.log(key); // 'name', 'age', 'city'
  22. }
  23. }

如果 for-in 循环要迭代的变量是 null 或 undefined,则不执行循环体。

for of(ES6)

遍历数组值

  1. var a = ['A', 'B', 'C'];
  2. var s = new Set(['A', 'B', 'C']);
  3. var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
  4. for (var x of a) { // 遍历Array
  5. console.log(x);
  6. }
  7. for (var x of s) { // 遍历Set
  8. console.log(x);
  9. }
  10. for (var x of m) { // 遍历Map
  11. console.log(x[0] + '=' + x[1]);
  12. }

遍历对象

  1. for(let [key, value] of Object.entries(objece)){
  2. }

==================

标签

标签语句用于给语句加标签,语法如下:
label: statement
下面是一个例子:

  1. start: for (let i = 0; i < count; i++) {
  2. console.log(i);
  3. }

在这个例子中,start 是一个标签,可以在后面通过 break 或 continue 语句引用。标签语句的
典型应用场景是嵌套循环。

==================

中断

continue 和 break

continue:跳出本次循环,立刻进行下一次循环

break:跳出当前循环体,执行循环体以外的代码

还可以给代码块加标签,然后continue 或 break 某个标签,如

  1. cars=["BMW","Volvo","Saab","Ford"];
  2. list: //这个就是标签,就是给代码块一个名字
  3. {
  4. document.write(cars[0] + "<br>");
  5. document.write(cars[1] + "<br>");
  6. document.write(cars[2] + "<br>");
  7. break list;
  8. document.write(cars[3] + "<br>");
  9. document.write(cars[4] + "<br>");
  10. document.write(cars[5] + "<br>");
  11. }

断点调试

1、浏览器断点

点上断点,刷新,那么代码运行到断点处就会停止,右边就可以查看到一些信息
image.png

2、debugger 代码断点

代码中加入debugger,那么程序运行到debugger位置就会停止
image.png

Watch 查看变量、函数

Watch可以添加要查看的变量、函数,可以显示它们的变化
image.png

继续调试

image.png
image.png 继续连续执行代码,到下一个断点停止
image.png 单步跳过,运行当前暂停的那行代码,然后到下一行停止。进入循环体时,会一步一步循环。
image.png 进入到函数里面单步运行

  1. var sum = function(x){
  2. for(i of arguments){
  3. console.log(i);
  4. }
  5. }
  6. debugger;
  7. sum(1,2,3,4,5)

如上例子,浏览器会在debugger这里第7行停止运行:

1、点击image.png,程序会跳到第8行停止运行,再点一次就会直接得到sum(1,2,3,4,5)的结果

2、如果是点击image.png,则程序会跳到第8行停止运行,再点一次会跳到第2行停止运行,再点就会跳到第3行,开始一步一步for循环,而不是直接得出结果。

Call Stack 查看调用栈

image.png
可以查到到函数怎么调用栈空间。如上图,sum1先入栈,最后出,sum3最后入栈,最先出。