欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

流程控制之分支和循环

程序员文章站 2022-05-21 23:23:39
...

流程控制之分支

单分支

  1. if(true){
  2. console.log("对");
  3. }

双分支

  1. if(true){
  2. console.log("对");
  3. }else{
  4. console.log("错");
  5. }

多分支

  1. let age = 121;
  2. if (age >= 18 && age < 50) {
  3. console.log("成年人");
  4. } else if (age >= 50 && age < 70) {
  5. console.log("中老年");
  6. } else if (age >= 70 && age <= 100) {
  7. console.log("老年人");
  8. } else if (age < 1 || age > 100) {
  9. console.log("非法传参");
  10. } else {
  11. console.log("未成年");
  12. }

多分支有个语法糖可以代替,switch

  1. //区间判断条件用true
  2. switch (true) {
  3. case age >= 18 && age < 50:
  4. console.log("成年人");
  5. break;
  6. case age >= 50 && age < 70:
  7. console.log("中老年");
  8. break;
  9. case age >= 70 && age <= 100:
  10. console.log("老年人");
  11. break;
  12. case age < 1 || age > 100:
  13. console.log("非法传参");
  14. break;
  15. default:
  16. console.log("未成年");
  17. }
  18. //单值判断用变量
  19. let sex = 1;
  20. switch (sex) {
  21. case 1:
  22. console.log("男");
  23. break;
  24. case 2:
  25. console.log("女")
  26. break;
  27. default:
  28. console.log("保密");
  29. }

流程控制之循环

while循环

  1. const arr = [1, 2, 3, 4, 5, 6];
  2. let lenght = arr.length;
  3. let i = 0;
  4. while (i < lenght) {
  5. console.log(arr[i]);
  6. i++;
  7. }
  • 循环三条件
  1. 初始条件: 数组索引的引用 ( i = 0 )
  2. 循环条件: 为真才执行循环体 ( i < arr.length )
  3. 更新条件: 必须要有,否则进入死循环 ( i++ )

do-while循环

  1. // do{}while() 先执行后判断
  2. i = 0
  3. do {
  4. console.log(arr[i]);
  5. i++;
  6. } while (i < lenght)

for循环

  1. const colors = ["red", "blue", "green"];
  2. for (let i = 0, lenght = colors.length; i < lenght; i++) {
  3. console.log(colors[i]);
  4. }

数组操作中最常用的还有for-of循环

  1. // for-of输出目标键值对或数组
  2. // 输出键值对组成的数组
  3. for (let item of colors.entries()) {
  4. console.log(item);
  5. }
  6. // 输出键的数组
  7. for (let item of colors.keys()) {
  8. console.log(item);
  9. }
  10. // 输出值的数组
  11. for (let item of colors.values()) {
  12. console.log(item);
  13. }

for-in 遍历对象

  1. let obj = { "name": "张三", "sex": "1", "city": "beijing", "callback": function () { } };
  2. for (let item in obj) {
  3. console.log(obj[item]);
  4. }
  5. // 虽然数组也是对象,但是数组一般不用for-in这种形式遍历

函数的参数与返回值

当函数参数不足时,要在函数定义时给参数加默认值

  1. let f1=(a,b=0)=>a+b;
  2. console.log(f1(1));//返回1
  3. console.log(f1(2,3));//返回5

当函数参数过多,则需要把所有参数都接受到一个数组中:
... : rest语法剩余参数,归并参数,将所有参数全部压入到一个数组中

  1. let f = (...arr) => arr;
  2. console.log(f(1, 2, 3));//输出[1,2,3]
  3. // ...[集合数据],可以将它"展开"成一个个独立的元素,用在调用的时候
  4. console.log(...[1, 2, 3, 4]);//输出1,2,3,4
  5. //用模板字符串输出看一下参数的对应情况
  6. f = (a, b, ...arr) => `a=${a}, b=${b}, ...arr=[${arr}]`;
  7. console.log(f(1, 2, 3, 4, 5, 6));//输出a=1,b=2,...arr=[3,4,5,6]
  8. f = (a, b, ...arr) => arr;//只返回数组部分
  9. console.log(f(1, 2, 3, 4, 5, 6));//输出[3,4,5,6]
  10. // 实例1:计算任何数量的数据之和
  11. f = (...arr) => arr.reduce((a, c) => a + c);
  12. console.log(f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));//输出55
  13. // 实例2:服务器返回类型列表,把类型套上html标签,添加到页面中
  14. const json = ["女装", "男装", "童装", "饰品", "鞋包"];
  15. let f = (...item) => item.map(item => `<li>${item}</li>`).join("");
  16. console.log(f(...json));
  17. //输出:<li>女装</li><li>男装</li><li>童装</li><li>饰品</li><li>鞋包</li>
  18. // document.body.innerHTML = "<ul>" + f(...json) + "</ul>";

函数返回单值

  1. let f=(a,b)=>a+b;
  2. console.log(f(1,2));//返回3

函数返回多值时有两种方式:1. 返回数组,2. 返回对象(模块)

  1. 返回数组

    1. f = () => [1, "a", 2];
    2. console.log(f());//返回:[ 1, 'a', 2 ]
  2. 返回对象

  1. f = () => ({ "a": "1", "b": "2", "c": function () { } });//返回一个对象时,要用`()`把返回值包起来
  2. console.log(f());//返回:{ a: '1', b: '2', c: [λ: c] }

对象字面量的简化——推荐使用

  1. // 变量简化
  2. let name = '张二狗';
  3. let user = {
  4. name,//name:name,对象内的name=全局中的name,由于命名相同可以简写为name
  5. // getName: function () {
  6. // return this.name;
  7. // }
  8. // 方法简化
  9. //对象中的方法可以省略function,以属性名当函数名
  10. getName() {
  11. return this.name;
  12. }
  13. //注意:对象里的方法不可以用箭头函数来简写,因为箭头函数里的this在声明时定义,写在方法中的时候是不会指向当前方法的,所以只能如上面写法;
  14. };
  15. console.log(user.name);//张二狗
  16. console.log(user.getName());//张二狗

模板字面量(模板字符串)与模板函数(标签函数)

模板字面量是用一对反引号括起来的字符串;
模板字面量中可以使用插值解析变量

  1. let name = "小花";
  2. console.log("Hello " + name);
  3. // 变量/表达式等插值,使用 ${...}插入到模板字面量中
  4. console.log(`Hello ${name}`);//输出Hello 小花
  5. console.log(`10 + 20 = ${10 + 20}`);//输出 10 + 20 = 30
  6. console.log(`${10 < 20 ? `大于` : `小于`}`);//输出:小于
  • 模板字面量: 可以使用插值表达式的字符串
  • 模板函数: 可以使用”模板字面量”为参数的函数
  • 模板函数,就是在”模板字面量”之前加一个标签/标识符,而这个标签,就是一个函数名
  • 模板函数的参数是有约定的, 不能乱写, 第一个是字面量数组,从第二起才是内部的占位符参数

模板函数

  1. // * 使用 ...rest 将插值进行合并
  2. function sum(strings, ...args) {
  3. console.log(strings);//输出:['计算多个数之和:','','','','']
  4. console.log(args);//输出:[1,2,3,4]
  5. console.log(`[${args.join()}] 之和是: ${args.reduce((a, c) => a + c)}`);
  6. }
  7. // 调用
  8. sum`计算多个数和: ${1}${2}${3}${4}`;//输出:[1,2,3,4] 之和是: 10