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

实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

程序员文章站 2022-04-17 19:10:33
...

以防以后代码不会,今日代码学习部分又很长,将自己写的整体代码部分,放到文章的最后.

流程控制

流程控制分支

  1. 默认分支
  2. 顺序分支,顺序分支又分为单分支, 双分支,多分支
  3. 循环分支
默认分支

代码示例:

  1. {
  2. console.log("我爱你");
  3. }
  4. // 分支的意思就是有条件的时候,执行
  5. // 单分支,就是执行的时候判断一次,只有一个分支结果
  6. // 声明一个变量
  7. let love = 10;
  8. if (love >= 10) {
  9. console.log("我爱你十分");
  10. }

运行示例图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

双分支

语法:

  1. if(条件){
  2. 成立结果
  3. }else{
  4. 不成立结果
  5. }
  6. //简化方案语法
  7. let ai = love <= 15 ? "成立" : "不成立";
  8. //前面我用let 声明了一个ai变量,把结果储存里面了

代码示例:

  1. // 双分支
  2. // 有一个默认分支,除了判断的那个分支外,当找不到当前匹配的结果时,默认的那个分支
  3. love = 16;
  4. if (love <= 15) {
  5. console.log("你对我的爱还没有十五分");
  6. } else {
  7. console.log("还是你比较爱我,都超过15分了");
  8. }
  9. // 双分支的简化
  10. // 需要用一个变量声明来做,下面是简化方案:
  11. let ai = love <= 15 ? "你对我的爱还没有十五分" : "还是你厉害,爱死我了,对我的爱都超过15分了";
  12. console.log(ai);
  13. // 语法请记住,双支判断的时候,是 判断语法 ? true : false;

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

多分支:

示例代码:
语法:

  1. if (条件) {
  2. 结果
  3. } else if (条件) {
  4. 结果
  5. } else if (条件) {
  6. 结果
  7. }
  8. //简写switch版本
  9. switch (传入的值或表达式进入) {
  10. case 条件判断:
  11. //需要输出的值
  12. break;
  13. case 条件判断:
  14. //需要输出的值
  15. break;
  16. default:
  17. //默认值
  18. break;
  19. }
  1. // 多分支
  2. love = 55;
  3. if (love <= 10) {
  4. console.log("我还没超过十岁拉");
  5. } else if (love > 10 && love <= 20) {
  6. console.log("我在10到20岁之间");
  7. } else if (love >= 21 && love <= 35) {
  8. console.log("我还是青春期吗???");
  9. } else if (love >= 36 && love <= 50) {
  10. console.log("我现在是青壮年??");
  11. } else if (love >= 51 && love <= 60) {
  12. console.log("我这年级上不了班了,在家待业吧,要不就看个大门吧");
  13. } else if (love >= 60) {
  14. console.log("超过60啦,在家哄小孩啦");
  15. }
  16. // 多分支优化简写版本
  17. love = 50;
  18. switch (true) {
  19. case love > 10 && love <= 20:
  20. console.log("我在十岁到20岁之间");
  21. break;
  22. case love >= 21 && love <= 35:
  23. console.log("我还是青春期吗???");
  24. default:
  25. console.log("你猜猜我几岁");
  26. }
  27. // love = 10;
  28. // switch (true) {
  29. // case love > 10 && love <= 20:
  30. // console.log ("我还没超过十岁拉");
  31. // break;
  32. // default:
  33. // console.log("我在10到20岁之间");
  34. // }

代码示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

单值判断变量

单值条件判断,其实我还是用的是多分支,只不过用swith传入了一个值
使用了一个方法
.toLocaleLowerCase() //对字母大小写进行格式化

  1. let zhan = "dedecms";
  2. // 还可以对字符格式化处理,比如别人提供的api是大小写字母等操作,我们需要对大小写进行格式化
  3. zhan = "Diguocms";
  4. zhan = "Zblog";
  5. // switch语法是,
  6. // seitch(判断,可以是外部变量的判断) {
  7. // case 结果(这个结果可能是一个字符也可能是数字,甚至可能是一个表达式 break)}
  8. switch (zhan.toLocaleLowerCase()) {
  9. case "dedecms":
  10. console.log("目前使用的织梦cms");
  11. break;
  12. case "diguocms":
  13. console.log("目前使用的帝国cms");
  14. break;
  15. case "zblog":
  16. console.log("目前使用zblog博客程序");
  17. break;
  18. default:
  19. console.log("可能大佬用的discuz吧");
  20. break;
  21. }

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

流程控制: 循环

先进行获取数组的长度
使用代码:.length获取数组的长度
代码示例:

  1. // 先声明一个数组类常量
  2. const niuniu = ["niu", "luotuo", "feiji"];
  3. // 打印一下
  4. console.log(niuniu[0], niuniu[1], niuniu[2]);
  5. // 当前的索引是从0开始,0 , 1, 2
  6. // array是一个数组, 数组就是对象, 既然是对象就有方法和属性;
  7. console.log(niuniu.length);
  8. // .length 打印当前数组的长度.数组名.length
  9. // 当前属性是打印数组的长度,当前数组有三个对象,;
  10. console.log(niuniu[2]);
  11. console.log(niuniu[3]);
  12. // 提示越界了,没有这个参数
  13. console.log(niuniu.length - 1);
  14. console.log(niuniu[niuniu.length - 1]);
  15. console.log(niuniu[niuniu.length]);
  16. // 因为数组的长度是3,但是数组是从0开始的,结束就为2,所以超出越界了,因为数组的索引是从0开始

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

遍历索引

遍历索引的条件:
遍历循环数据的三个条件

  1. 起始索引
  2. 循环条件
  3. 更新条件

代码示例:

  1. // 先声明一个当前索引
  2. let a = 0;
  3. let b = niuniu.length;
  4. // 遍历循环数据的三个条件, 1,起始索引, 2,更新, 3,结束
  5. if (a < b) {
  6. console.log(niuniu[a]);
  7. a = a + 1;
  8. }
  9. if (a < b) {
  10. console.log(niuniu[a]);
  11. a = a + 1;
  12. }
  13. if (a < b) {
  14. console.log(niuniu[a]);
  15. a = a + 1;
  16. // 或者a++,意思一样
  17. }
  18. ////////////////////
  19. /////下面是简化方案
  20. ///////////////////
  21. //这里以后回来看不要看不懂哦,这里是已经使用.length获取了数组的长度,let b = niuniu.length;赋值给了参数b,在上面,所以条件是当a=0,当a小于b时,a++,
  22. a = 0;
  23. while (a < b) {
  24. console.log(niuniu[a]);
  25. a++;
  26. }
  27. /**
  28. * * 循环三条件
  29. * * 1. 初始条件: 数组索引的引用 ( i = 0 )
  30. * * 2. 循环条件: 为真才执行循环体 ( i < arr.length )
  31. * * 3. 更新条件: 必须要有,否则进入死循环 ( i++ )
  32. */

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

简体方案一在上面已经写了第一个,下面是第二种简体方案
是用do while,
while是先判断条件是否成立,然后再进入循环体执行,do while是无论是否条件成立,都将循环一次.
示例代码:

  1. // //while()入口型判断
  2. // * do {} while(), 出口型判断,无论条件是否成立, 必须执行一次代码块
  3. a = 0;
  4. do {
  5. console.log(niuniu[a]);
  6. a++;
  7. } while (a < niuniu.length);
  8. // do循环是先执行一遍,然后才是判断语句

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

既然是循环体,那么还可以继续优化,继续优化的方案就是,先计算数组的长度,计算完毕后赋值给一个参数,老师还说了其他两种方案,哪两种方案最后说
先看未使用迭代,直接使用for循环的方式
代码部分:

  1. // ! for () 是 while 的简化
  2. // * 语法: for (初始条件; 循环条件; 更新条件) {...}
  3. for (a = 0; a < niuniu.length; a++) {
  4. console.log(niuniu[a]);
  5. }

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能
使用先计算数组长度,再进行循环的
就是预先将数组的长度,计算出来,放入到一个变量中,不必要每次循环都将计算数组的长度
代码部分:

  1. // 优化方案
  2. // 这个理解为,初始条件为a等于0,b是数组长度,当a小于数组长度时,a自身+1
  3. // 优化, 将数组长度,提前计算出来缓存到一个变量中
  4. for (a = 0, b = niuniu.length; a < b; a++) {
  5. console.log(niuniu[a]);
  6. }

剩下的是两种迭代器的for of 和for in方案,在es6中很常见的方案
for of:对数组操作循环
for in:对对象操作循环,当然,数组也是对象,也可以使用,但是不建议使用
首先说for of要知道几个方法,我用表格写到下面:

方法 使用方式/示例 说明
.entries() 数组.keys()/niuniu.keys() .entries() 数组成员, 输出数组中的 “键值” 对组成的数组
.keys() 数组.entries/niuniu.entries .keys()输出数组中的 “键” 对组成的数组
.values() 数组.values/niuniu.values 输出数组中的 “值” 对组成的数组默认调用values(),输出值

for of代码语法:

  1. for (let 变量 of 数组.entries()) {
  2. console.log(变量);
  3. }

代码示例:

  1. // ! for - of : 快速迭代处理集合数据
  2. // * 数组内部有一个迭代器的方法, 可以用for-of
  3. // * for-of优点: 用户不必再去关心索引, 而将注意力集中到数组成员上
  4. // 感觉for - of 是魔改版本,因为他缺少了起始和更新条件,只有一个数组成员,而数组成员直接赋值给了变量,变成了数组
  5. // 写法是:
  6. // 使用到一个新的对象方法,
  7. // .entries() 数组成员
  8. // v 输出数组中的 "键值" 对组成的数组
  9. // .keys()
  10. // v 输出数组中的 "键" 对组成的数组
  11. // .values()
  12. // v 输出数组中的 "值" 对组成的数组
  13. // ! 默认调用values(),输出值
  14. // for (let 变量 of 数组.entries()) {
  15. // console.log(变量);
  16. // }
  17. // 上面这个变量,也是数组成员的意思
  18. // for -of是针对数组使用
  19. for (let shuzu of niuniu.entries()) {
  20. console.log(shuzu);
  21. }
  22. for (let shuzu of niuniu.keys()) {
  23. console.log(shuzu);
  24. // 提取键
  25. }
  26. for (let shuzu of niuniu.values()) {
  27. console.log(shuzu);
  28. // 提取的键值对的对
  29. }
  30. for (let shuzu of niuniu) {
  31. console.log(shuzu);
  32. // 默认提取的键值对的对
  33. }

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

for in语法:

  1. for (let 变量/数组成员 in 数组) {
  2. console.log(数组[变量/数组成员]);
  3. }

示例代码:

  1. // for -in是针对对象使用
  2. // 遍历对象跟遍历数组稍微有一点不同;
  3. // 遍历对象是以下写法;
  4. // for (let 变量/数组成员 in 数组) {
  5. // console.log(数组[变量/数组成员]);
  6. // }
  7. // 上面这个变量也是数组成员的意思
  8. let niuniu1 = {
  9. name: "名字",
  10. name2: "名字2",
  11. name3: "名字3",
  12. };
  13. for (let shuzu1 in niuniu1) {
  14. console.log(niuniu1[shuzu1]);
  15. }
  16. for (let shuzu of niuniu.values()) {
  17. console.log(shuzu);
  18. }
  19. // 数组数组 数组 数组也是对象
  20. for (let shuzu2 in niuniu) {
  21. console.log(niuniu[shuzu2]);
  22. }

实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

函数的参数与返回值
参数不足及参数过多的解决方案

参数不足的解决方案:
其实就是在方法里面默认一个参数,默认之后再调用结果的时候,并不会影响到调用时的结果.
直接上代码部分:

  1. let ad = (a, b) => a + b;
  2. console.log(ad(1, 2));
  3. console.log(ad(1));
  4. ad = (a, b = 0) => a + b;
  5. console.log(ad(1));
  6. console.log(ad(5, 5));
  7. // 在参数返回值不足的情况下,给当前函数对象一个默认返回值即可
  8. ad = function mingzi(a, b = 0) {
  9. return a + b;
  10. };
  11. console.log(ad(1, 2));
  12. function mingzi(a, b) {
  13. return a + b;
  14. }
  15. console.log(mingzi(1, 2));

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

参数过多的解决方案:

使用… rest语法,剩余参数,归并参数,将所以参数全部压入到一个数组中
…语法还可以将集合展开

将数组压入到一个数组中
  1. // 将多余的数字,可以以数组的方式全部接收
  2. // ! ...: rest语法,剩余参数,归并参数,将所以参数全部压入到一个数组中
  3. ad = (...c) => c;
  4. console.log(ad(1, 2, 3, 4, 5, 6));
  5. // 将所有的数字,压缩成数组,放到...c中

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

示例2:赋值方式:

  1. ad = (a, b, ...shuzu) => `${a},${b},${shuzu}`;
  2. console.log(ad(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

将数组展开

示例代码:

  1. // 将集合数据展开
  2. console.log(...[1, 2, 3, 4, 5]);
  3. let ad1 = [1, 2, 3, 4, 5, 6, 7, 8];
  4. console.log(...ad1);

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

花絮部分,老师写的箭头函数代码,老师说我们还没学到,我就暂时先对代码还原成了非箭头函数

  1. let f = (...arr) => arr.reduce((a, c) => a + c);
  2. console.log(f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
  3. //没学高阶函数,那就先给老师的讲解进行还原
  4. f = function (...arr) {
  5. return arr.reduce(function (a, c) {
  6. return a + c;
  7. });
  8. };
  9. console.log(f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
  10. // 从服务器API接口获取到了个商品列表: JSON数组
  11. const list = ["笔记本电脑", "小米12手机", "佳能 EOS-R相机"];
  12. console.log(list);
  13. // 将每个商品,套上html标签,最终渲染到html页面中
  14. f = (...items) => items.map(item => `<li>${item}</li>`).join("");
  15. console.log(f(...list));
  16. // document.body.innerHTML = "<ul>" + f(...list) + "</ul>";
  17. qq = function (...items) {
  18. return items
  19. .map(function (item) {
  20. return `<li>${item}</li>`;
  21. })
  22. .join("");
  23. };
  24. console.log(qq(...list));

代码运行参数截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

利用函数返回多个值

  1. / ! 返回值
  2. // p 函数默认:'单值返回'
  3. // y 如何返回多个值?
  4. // 数组
  5. qq = () => [1, 2, 3, 4, 5];
  6. console.log(qq());
  7. // 拆分处理
  8. console.log(...qq());
  9. // 结合for of循环提取键跟值
  10. for (let tiqu of qq().entries()) {
  11. console.log(tiqu);
  12. }
  13. for (let tiqu of qq().keys()) {
  14. console.log(tiqu);
  15. }
  16. console.log(qq());
  17. // 对象
  18. qq = () => ({ name: "名字", Name: "名字2", nAme: "名字三" });
  19. console.log(qq());
  20. // 还原以上函数
  21. //对象
  22. let qq1 = function () {
  23. return { name: "名字", Name: "名字2", nAme: "名字三" };
  24. };
  25. console.log(qq1());
  26. // 结合for in循环提取
  27. for (let tiqu in qq1()) {
  28. console.log(qq1()[tiqu]);
  29. }
对象字面量的简化

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

属性简化

1 变量name 与 属性name 同名
2且在同一个作用域中,可以不写变量名
代码部分:

  1. //对象字面量的简化 推荐使用部分
  2. //先声明一个变量
  3. let name = "小明";
  4. let a = {
  5. name: name,
  6. };
  7. console.log(a.name);
  8. // 简化
  9. a = {
  10. name,
  11. };
  12. console.log(a.name);
  13. // name: "猪老湿",
  14. // name: name,
  15. // * 1 变量name 与 属性name 同名
  16. // * 2且在同一个作用域中,可以不写变量名
  17. // 不加this返回的是数组的值
  18. a = () => name;
  19. console.log(a());

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

方法简化

所谓方法:本质仍是属性,只不过它的值是一个函数声明
在对象中的函数中,是简化,将 ”: function” 删除
并且记住:
箭头函数如果用到 this, 就不要用到对象字面量方法中
this: 普通函数, 调用时确定
this: 箭头函数, 声明时确定

先贴一个老师写的部分: 先贴一个老师写的部分:
  1. user = {
  2. name,
  3. // 所谓方法:本质仍是属性,只不过它的值是一个函数声明
  4. // getName: function () {
  5. // return this.name;
  6. // },
  7. // 简化,将 ”: function" 删除
  8. getName() {
  9. return this.name;
  10. },
  11. // 箭头函数
  12. getName1: () => user.name,
  13. // 箭头函数如果用到 this, 就不要用到对象字面量方法中
  14. // this: 普通函数, 调用时确定
  15. // this: 箭头函数, 声明时确定
  16. };
  17. console.log(user.getName());
  18. console.log(user.getName1());

自己的代码:

  1. // 方法简化 对象内有数组的情况
  2. a = {
  3. name,
  4. ab: function () {
  5. return a.name;
  6. },
  7. };
  8. console.log(a.ab());
  9. a = {
  10. name,
  11. ab: function () {
  12. return this.name;
  13. },
  14. };
  15. console.log(a.ab());
  16. // 简写
  17. a = {
  18. name,
  19. ab: () => a.name,
  20. ac() {
  21. return this.name;
  22. },
  23. };
  24. console.log(a.ab());
  25. console.log(a.ac());

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

模板字面量与模板函数

先说模板字面量,算是一个较为好理解的.
模板字面量可以在传统的代码中插入插值,甚至可以计算以及放入块元素
使用到的符号为 打不出来,就是在键盘TAB上面那个键,也是在键盘左上角,esc下面那个站,键盘1旁边那个键,在使用字面量中,如果字面量中有变量,需要用${变量不限于一个}包裹,在计算中,包裹的变量是${a+b}这种,放入块元素时,需要对非变量,也就是字符部分需要用(没办法打不出来,就是tab上面那个键)符号包裹起来,直接上示例代码及图吧

  1. //模板字面量与模板函数
  2. // 模板字面量
  3. // 传统如下:
  4. console.log("你好啊php");
  5. // 模板字面量可以在传统的代码中插入插值
  6. let php = "php";
  7. console.log(php);
  8. console.log("你好" + php);
  9. console.log(`你好${php}`);
  10. // 还可以进行计算使用
  11. console.log(`1+1=${1 + 1}`);
  12. //甚至可以放入块元素
  13. console.log(`${10 > 1 ? `大于` : `小于`}`);

刚刚看到一份老师的解释,贴出来

  1. /**
  2. * * 模板字面量: 可以使用插值表达式的字符串
  3. * * 模板函数: 可以使用"模板字面量"为参数的函数
  4. * * 模板函数,就是在"模板字面量"之前加一个标签/标识符,而这个标签,就是一个函数名
  5. * * 模板函数的参数是有约定的, 不能乱写, 第一个是字面量数组,从第二起才是内部的占位符参数
  6. */
  7. // v 模板字面量, 也叫"模板字符串" , 是同义词,我觉得用"模板字面量"更直观,准确
  8. // v 模板函数, 有的书也翻译与"标签函数", 因为 它使用"模板字面量"做参数,称为"模板函数"更直观, 一看知识必须传一个模板字面量当参数

我的示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

模板函数

模板函数也比较有意思,在声明成模板函数时,函数里面的第一个参数将变成数组,剩下那俩还是参数,在调用中,字符串的部分,将储存到数组中,也就是第一个参数中,在调用其他俩参数时,需要用${}来包裹,第一个参数既然已经成为了数组,那么调用他的方式,将以数组的方式调用.本来已经写完了,刚刚又看到老师的最后一段代码,发现一个事情,是模板函数中,…rest 将插值进行合并,如果使用$(数字)传入的参数值,那么此参数将直接传值给函数里面,看第三份示例图下面的代码
先上一份截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能
再上一份定义为模板函数的
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

代码部分:

  1. // 当函数声明使用函数模板时,函数声明内的第一个对象变为数组,后面的为值
  2. // function name(string, y, q) {
  3. // console.log(string);
  4. // console.log(y, q);
  5. // let jiage = ` ${string[0]} ${y} ${string[1]} ${q} ${string[2]} ${y * q}${string[3]} `;
  6. // console.log(jiage)
  7. // }
  8. // let y = 10;
  9. // let q = 20;
  10. // name`当前的蔬菜价格单价为${y}数量为${q}总价格为 ${y * q}元`;
  11. function name(string, y, q) {
  12. console.log(string);
  13. console.log(y, q);
  14. let jiage = ` ${string[0]} ${y} ${string[1]} ${q} ${string[2]} ${y * q}${string[3]} `;
  15. console.log(jiage);
  16. }
  17. let y = 10;
  18. let q = 20;
  19. // 使用函数模板时不需要加(),如下 name``;
  20. name`当前的蔬菜价格单价为${y}数量为${20}总价格为 ${y * q}元`;
  21. // name();
  22. // name``;
  23. // console.log(name(1, y, q));

代码示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能

调用的代码部分:

  1. // ! 模板函数的优化, 以后只用这一种, 上面也要能看懂
  2. // * 使用 ...rest 将插值进行合并
  3. function sum(strings, ...args) {
  4. console.log(strings);
  5. console.log(args);
  6. console.log(`[${args.join()}] 之和是: ${args.reduce((a, c) => a + c)}`);
  7. }
  8. // 调用
  9. sum`计算多个数和: ${1}${2}${3}${4}`;

示例截图:
实例演示流程的分支循环和函数参数的返回值,并对对象字面量和模板字面量进行了演示,分析了模板字面量和模板函数的参数功能
get代码:
.join()将数组以字符串方式返回
.reduce数组内的数据总和

老师下面的就不用看了,自己写的代码,保存一下 后面自己学习用
先贴老师的:
流程分支

  1. // todo 流程控制 : 分支
  2. /**
  3. * * 程序默认执行流程:
  4. * * 1. 顺序: (默认)
  5. * * 2. 分支: 单分支, 双分支, 多分支
  6. * * 3. 循环: 单分支的重复执行
  7. */
  8. // 代码块
  9. {
  10. console.log("Hello php.cn");
  11. }
  12. // ! 分支: 有条件的执行某个代码块
  13. // * 单分支: 仅当表达式计算结果为真时, 才执行代码块
  14. let age = 28;
  15. // age >= 18 true: 执行
  16. if (age >= 18) {
  17. console.log("允许观看");
  18. }
  19. // 如果为false, 怎么办?
  20. // 创建一个分支: 默认分支, else
  21. // ! 双分支: 有一个"默认分支"
  22. age = 15;
  23. if (age >= 18) {
  24. console.log("允许观看");
  25. }
  26. // * 默认分支
  27. else {
  28. console.log("少儿不宜");
  29. }
  30. // ! 双分支的简化
  31. // ! 双分支属于高频操作, 系统提供了一个"语法糖"(简化方案): 三元
  32. // * 语法: (条件) ? true : false
  33. age = 50;
  34. let res = age >= 18 ? "允许观看" : "少儿不宜";
  35. console.log(res);
  36. // ! 多分支: 有多个"默认分支"
  37. age = 4;
  38. if (age >= 18 && age < 35) {
  39. console.log("允许单独观看");
  40. }
  41. // * 第1个默认分支
  42. else if (age >= 35 && age < 60) {
  43. console.log("建议二人观看");
  44. }
  45. // * 第2个默认分支
  46. else if (age >= 60 && age < 120) {
  47. console.log("建议在家人陪同下观看");
  48. }
  49. // * 第3个默认分支: 异常分支, 使用 "||" 或 , 满足条件之一就可以了, true
  50. else if (age <= 3 || age >= 120) {
  51. console.log("非法年龄");
  52. }
  53. // * 默认分支(可选)
  54. else {
  55. console.log("少儿不宜");
  56. }
  57. // 传统多分, if - else if - else if --- , 代码混乱
  58. // switch 进行优化
  59. // ! 多分支 switch
  60. age = 18;
  61. // * 区间判断, 使用 true
  62. switch (true) {
  63. case age >= 18 && age < 35:
  64. console.log("允许单独观看");
  65. break;
  66. case age >= 35 && age < 60:
  67. console.log("建议二人观看");
  68. break;
  69. case age > 60 && age < 120:
  70. console.log("请在家人陪同下观看");
  71. break;
  72. case age <= 3 || age >= 120:
  73. console.log("非法年龄");
  74. break;
  75. default:
  76. console.log("少儿不宜");
  77. }
  78. // * 单值判断: 变量
  79. let lang = "html";
  80. lang = "css";
  81. lang = "javascript";
  82. lang = "js";
  83. lang = "CSS";
  84. lang = "JavaScript";
  85. // lang = "HTML";
  86. console.log(lang.toLowerCase());
  87. switch (lang.toLowerCase()) {
  88. // 将传入的进行判断的变量值,进行统一化
  89. // 将传入的字符串, 全部小写, 或者 大写
  90. case "html":
  91. console.log("超文本标记语言");
  92. break;
  93. case "css":
  94. console.log("层叠样式表");
  95. break;
  96. case "javascript":
  97. case "js":
  98. console.log("通用前端脚本编程语言");
  99. break;
  100. default:
  101. console.log("不能识别");
  102. }

流程控制循环:

  1. // todo 流程控制: 循环
  2. const colors = ["red", "green", "blue"];
  3. // 0: red, 1: green, 2: blue
  4. // * 1. 从哪开始? 2. 到哪结束? 索引从 0 开始, 到2 结束
  5. console.log(colors[0], colors[1], colors[2]);
  6. //array是一个对象, 是对象就会有属性或方法
  7. // colors.length 数组长度, 数组内的成员数量
  8. console.log(colors.length);
  9. // 最后一个
  10. console.log(colors[2]);
  11. console.log(colors[colors.length - 1]);
  12. // 遍历结束的标记, 数组越界了, undefined
  13. console.log(colors[3]);
  14. console.log(colors[colors.length]);
  15. // * 1. 起始索引
  16. let i = 0;
  17. // * 2. 循环条件
  18. let length = colors.length;
  19. // i < colors.length 直到 i === 3 , i === colors.length的时候,遍历结束
  20. // * 3. 更新条件
  21. // 让数据的索引,自动指向下一个成员, 更新必须在代码块中
  22. // ! 必须更新条件,否则进入死循环
  23. // 第1次遍历
  24. if (i < length) {
  25. console.log(colors[i]);
  26. // * 更新条件, 将 i 指向下一个元素的索引
  27. // i = i + 1;
  28. // i += 1;
  29. // 如果每一次都递增 1, 还可进一步简化
  30. i++;
  31. }
  32. console.log(i);
  33. // 第2次遍历
  34. if (i < length) {
  35. console.log(colors[i]);
  36. // * 更新条件
  37. i++;
  38. }
  39. console.log(i);
  40. // 第3次遍历
  41. if (i < length) {
  42. console.log(colors[i]);
  43. // * 更新条件
  44. i++;
  45. }
  46. console.log(i);
  47. // 第4次遍历, 3 === length, i<length 为 false 不执行了
  48. if (i < length) {
  49. console.log(colors[i]);
  50. // * 更新条件
  51. i++;
  52. }
  53. console.log(i);
  54. // ! while 循环
  55. // * while 可以将上面的多次的if()遍历进行合并
  56. i = 0;
  57. while (i < length) {
  58. console.log(colors[i]);
  59. // * 更新条件
  60. i++;
  61. }
  62. /**
  63. * * 循环三条件
  64. * * 1. 初始条件: 数组索引的引用 ( i = 0 )
  65. * * 2. 循环条件: 为真才执行循环体 ( i < arr.length )
  66. * * 3. 更新条件: 必须要有,否则进入死循环 ( i++ )
  67. */
  68. // //while()入口型判断
  69. // * do {} while(), 出口型判断,无论条件是否成立, 必须执行一次代码块
  70. i = 0;
  71. do {
  72. console.log(colors[i]);
  73. // * 更新条件
  74. i++;
  75. } while (i > length);
  76. // ! for () 是 while 的简化
  77. // * 语法: for (初始条件; 循环条件; 更新条件) {...}
  78. for (let i = 0; i < colors.length; i++) {
  79. console.log(colors[i]);
  80. }
  81. // 优化, 将数组长度,提前计算出来缓存到一个变量中
  82. for (let i = 0, length = colors.length; i < length; i++) {
  83. console.log(colors[i]);
  84. }
  85. // ! for - of : 快速迭代处理集合数据
  86. // * 数组内部有一个迭代器的方法, 可以用for-of
  87. // * for-of优点: 用户不必再去关心索引, 而将注意力集中到数组成员上
  88. // v 输出数组中的 "键值" 对组成的数组
  89. for (let item of colors.entries()) {
  90. console.log(item);
  91. }
  92. // v 输出数组中的 "键" 对组成的数组
  93. for (let item of colors.keys()) {
  94. console.log(item);
  95. }
  96. // v 输出数组中的 "值" 对组成的数组
  97. for (let item of colors.values()) {
  98. console.log(item);
  99. }
  100. // ! 默认调用values(),输出值
  101. for (let item of colors) {
  102. console.log(item);
  103. }
  104. // ! for - in: 遍历对象
  105. const obj = { a: 1, b: 2, c: 3, say: function () {} };
  106. // 遍历对象
  107. for (let key in obj) {
  108. console.log(obj[key]);
  109. }
  110. // 数组也是对象
  111. for (let i in colors) {
  112. console.log(colors[i]);
  113. }
  114. // 数组也能用for-in,但不要这么用, for - of, forEach, map...

函数的参数与返回值

  1. // ! 函数的参数与返回值
  2. // y 1. 参数不足: 默认参数
  3. let f = (a, b) => a + b;
  4. console.log(f(1, 2));
  5. // Nan: Not a Number
  6. console.log(f(1));
  7. // * 解决方案: 默认参数
  8. f = (a, b = 0) => a + b;
  9. console.log(f(1));
  10. console.log(f(1, 2));
  11. // y 2. 参数过多, ...rest
  12. f = (a, b) => a + b;
  13. // 多余的参数3,4忽略了
  14. console.log(f(1, 2, 3, 4));
  15. // 怎么将多余的参数,全部接收? ...rest
  16. f = (...arr) => arr;
  17. // ! ...: rest语法,剩余参数,归并参数,将所以参数全部压入到一个数组中
  18. console.log(f(1, 2, 3, 4, 5));
  19. // ...集合数据,可以将它"展开"成一个个独立的元素,用在调用的时候
  20. console.log(...[1, 2, 3, 4]);
  21. f = (a, b, ...arr) => `${a}, ${b}, ${arr}`;
  22. f = (a, b, ...arr) => `${a}, ${b}, ${arr}`;
  23. // f = function (a, b, ...arr) {
  24. // return a',' b',' arr;
  25. // };
  26. console.log(f(1, 2, 3, 4, 5, 6));
  27. f = (a, b, ...arr) => arr;
  28. console.log(f(1, 2, 3, 4, 5, 6));
  29. // 计算任何数量的数据之和
  30. f = (...arr) => arr.reduce((a, c) => a + c);
  31. console.log(f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
  32. // 从服务器API接口获取到了个商品列表: JSON数组
  33. const list = ["笔记本电脑", "小米12手机", "佳能 EOS-R相机"];
  34. console.log(list);
  35. // 将每个商品,套上html标签,最终渲染到html页面中
  36. f = (...items) => items.map(item => `<li>${item}</li>`).join("");
  37. console.log(f(...list));
  38. // document.body.innerHTML = "<ul>" + f(...list) + "</ul>";
  39. // ! 返回值
  40. // p 函数默认:'单值返回'
  41. // y 如何返回多个值?
  42. // * 数组
  43. f = () => [1, 2, 3];
  44. console.log(f());
  45. // * 对象: 模块
  46. f = () => ({ a: 1, b: 2, get: function () {} });
  47. console.log(f());

对象字面量的简化:

  1. // y 对象字面量的简化,推荐使用
  2. let name = "猪老湿";
  3. // ! 属性简化
  4. let user = {
  5. // name: "猪老湿",
  6. // name: name,
  7. // * 1 变量name 与 属性name 同名
  8. // * 2且在同一个作用域中,可以不写变量名
  9. name,
  10. };
  11. console.log(user.name);
  12. // ! 方法简化
  13. user = {
  14. name,
  15. // 所谓方法:本质仍是属性,只不过它的值是一个函数声明
  16. // getName: function () {
  17. // return this.name;
  18. // },
  19. // 简化,将 ”: function" 删除
  20. getName() {
  21. return this.name;
  22. },
  23. // 箭头函数
  24. getName1: () => user.name,
  25. // 箭头函数如果用到 this, 就不要用到对象字面量方法中
  26. // this: 普通函数, 调用时确定
  27. // this: 箭头函数, 声明时确定
  28. };
  29. console.log(user.getName());
  30. console.log(user.getName1());

模板字面量与模板函数

  1. // y 模板字面量 与 模板函数
  2. // ! 模板字面量
  3. // 传统
  4. console.log("hello world");
  5. // 模板字面量
  6. console.log(`hello world`);
  7. // 模板字面量中,可以使用"插值"(变量,表达式),可以解析变量
  8. let name = "朱老师";
  9. console.log("Hello " + name);
  10. // 变量/表达式等插值,使用 ${...}插入到模板字面量中
  11. console.log(`Hello ${name}`);
  12. console.log(`10 + 20 = ${10 + 20}`);
  13. console.log(`${10 < 20 ? `大于` : `小于`}`);
  14. // ! 模板函数
  15. // * 就是使用"模板字面量'为参数的函数
  16. //* 模板函数(第一个参数是字面量组成的数组,第二个参数起,是字面量中的插值列表)
  17. // y 声明模板函数
  18. function total(strings, num, price) {
  19. console.log(strings);
  20. console.log(num, price);
  21. }
  22. let num = 10;
  23. let price = 20;
  24. // y 调用模板函数
  25. total`数量: ${10}单价:${500},${10}`;
  26. // ! 模板函数的优化, 以后只用这一种, 上面也要能看懂
  27. // * 使用 ...rest 将插值进行合并
  28. function sum(strings, ...args) {
  29. console.log(strings);
  30. console.log(args);
  31. console.log(`[${args.join()}] 之和是: ${args.reduce((a, c) => a + c)}`);
  32. }
  33. // 调用
  34. sum`计算多个数和: ${1}${2}${3}${4}`;
  35. /**
  36. * * 模板字面量: 可以使用插值表达式的字符串
  37. * * 模板函数: 可以使用"模板字面量"为参数的函数
  38. * * 模板函数,就是在"模板字面量"之前加一个标签/标识符,而这个标签,就是一个函数名
  39. * * 模板函数的参数是有约定的, 不能乱写, 第一个是字面量数组,从第二起才是内部的占位符参数
  40. */
  41. // v 模板字面量, 也叫"模板字符串" , 是同义词,我觉得用"模板字面量"更直观,准确
  42. // v 模板函数, 有的书也翻译与"标签函数", 因为 它使用"模板字面量"做参数,称为"模板函数"更直观, 一看知识必须传一个模板字面量当参数

自己的部分:

流程控制:

  1. // 流程控制分支
  2. // 默认分支
  3. // 顺序分支,顺序分支又分为单分支, 双分支,多分支
  4. // 循环分支
  5. // 代码块
  6. {
  7. console.log("我爱你");
  8. }
  9. // 分支的意思就是有条件的时候,执行
  10. // 单分支,就是执行的时候判断一次,只有一个分支结果
  11. // 声明一个变量
  12. let love = 10;
  13. if (love >= 10) {
  14. console.log("我爱你十分");
  15. }
  16. // 双分支
  17. // 有一个默认分支,除了判断的那个分支外,当找不到当前匹配的结果时,默认的那个分支
  18. love = 16;
  19. if (love <= 15) {
  20. console.log("你对我的爱还没有十五分");
  21. } else {
  22. console.log("还是你比较爱我,都超过15分了");
  23. }
  24. // 双分支的简化
  25. // 需要用一个变量声明来做
  26. let ai = love <= 15 ? "你对我的爱还没有十五分" : "还是你厉害,爱死我了,对我的爱都超过15分了";
  27. console.log(ai);
  28. // 语法请记住,双支判断的时候,是 判断语法 ? true : false;
  29. // 多分支
  30. love = 55;
  31. if (love <= 10) {
  32. console.log("我还没超过十岁拉");
  33. } else if (love > 10 && love <= 20) {
  34. console.log("我在10到20岁之间");
  35. } else if (love >= 21 && love <= 35) {
  36. console.log("我还是青春期吗???");
  37. } else if (love >= 36 && love <= 50) {
  38. console.log("我现在是青壮年??");
  39. } else if (love >= 51 && love <= 60) {
  40. console.log("我这年级上不了班了,在家待业吧,要不就看个大门吧");
  41. } else if (love >= 60) {
  42. console.log("超过60啦,在家哄小孩啦");
  43. }
  44. // 多分支优化版本
  45. love = 50;
  46. switch (true) {
  47. case love > 10 && love <= 20:
  48. console.log("我在十岁到20岁之间");
  49. break;
  50. case love >= 21 && love <= 35:
  51. console.log("我还是青春期吗???");
  52. default:
  53. console.log("你猜猜我几岁");
  54. }
  55. // love = 10;
  56. // switch (true) {
  57. // case love > 10 && love <= 20:
  58. // console.log ("我还没超过十岁拉");
  59. // break;
  60. // default:
  61. // console.log("我在10到20岁之间");
  62. // }
  63. // 单值判断变量
  64. let zhan = "dedecms";
  65. // 还可以对字符格式化处理,比如别人提供的api是大小写字母等操作,我们需要对大小写进行格式化
  66. zhan = "Diguocms";
  67. zhan = "Zblog";
  68. // 将传入的进行判断的变量值,进行统一化
  69. // 将传入的字符串, 全部小写, 或者 大写
  70. switch (zhan.toLocaleLowerCase()) {
  71. case "dedecms":
  72. console.log("目前使用的织梦cms");
  73. break;
  74. case "diguocms":
  75. console.log("目前使用的帝国cms");
  76. break;
  77. case "zblog":
  78. console.log("目前使用zblog博客程序");
  79. break;
  80. default:
  81. console.log("可能大佬用的discuz吧");
  82. break;
  83. }

流程控制与循环

  1. // 先声明一个数组类常量
  2. const niuniu = ["niu", "luotuo", "feiji"];
  3. // 打印一下
  4. console.log(niuniu[0], niuniu[1], niuniu[2]);
  5. // 当前的索引是从0开始,0 , 1, 2
  6. // array是一个数组, 数组就是对象, 既然是对象就有方法和属性;
  7. console.log(niuniu.length);
  8. // .length 打印当前数组的长度.数组名.length
  9. // 当前属性是打印数组的长度,当前数组有三个对象,;
  10. console.log(niuniu[2]);
  11. console.log(niuniu[3]);
  12. // 提示越界了,没有这个参数
  13. console.log(niuniu.length - 1);
  14. console.log(niuniu[niuniu.length - 1]);
  15. console.log(niuniu[niuniu.length]);
  16. // 因为数组的长度是3,但是数组是从0开始的,结束就为2,所以超出越界了,因为数组的索引是从0开始
  17. // 先声明一个当前索引
  18. let a = 0;
  19. let b = niuniu.length;
  20. // 遍历循环数据的三个条件, 1,起始索引, 2,更新, 3,结束
  21. if (a < b) {
  22. console.log(niuniu[a]);
  23. a = a + 1;
  24. }
  25. if (a < b) {
  26. console.log(niuniu[a]);
  27. a = a + 1;
  28. }
  29. if (a < b) {
  30. console.log(niuniu[a]);
  31. a = a + 1;
  32. // 或者a++,意思一样
  33. }
  34. a = 0;
  35. while (a < b) {
  36. console.log(niuniu[a]);
  37. a++;
  38. }
  39. /**
  40. * * 循环三条件
  41. * * 1. 初始条件: 数组索引的引用 ( i = 0 )
  42. * * 2. 循环条件: 为真才执行循环体 ( i < arr.length )
  43. * * 3. 更新条件: 必须要有,否则进入死循环 ( i++ )
  44. */
  45. // //while()入口型判断
  46. // * do {} while(), 出口型判断,无论条件是否成立, 必须执行一次代码块
  47. a = 0;
  48. do {
  49. console.log(niuniu[a]);
  50. a++;
  51. } while (a < niuniu.length);
  52. // do循环是先执行一遍,然后才是判断语句
  53. // ! for () 是 while 的简化
  54. // * 语法: for (初始条件; 循环条件; 更新条件) {...}
  55. for (a = 0; a < niuniu.length; a++) {
  56. console.log(niuniu[a]);
  57. }
  58. // 优化方案
  59. // 这个理解为,初始条件为a等于0,b是数组长度,当a小于数组长度时,a自身+1
  60. // 优化, 将数组长度,提前计算出来缓存到一个变量中
  61. for (a = 0, b = niuniu.length; a < b; a++) {
  62. console.log(niuniu[a]);
  63. }
  64. // ! for - of : 快速迭代处理集合数据
  65. // * 数组内部有一个迭代器的方法, 可以用for-of
  66. // * for-of优点: 用户不必再去关心索引, 而将注意力集中到数组成员上
  67. // 感觉for - of 是魔改版本,因为他缺少了起始和更新条件,只有一个数组成员,而数组成员直接赋值给了变量,变成了数组
  68. // 写法是:
  69. // 使用到一个新的对象方法,
  70. // .entries() 数组成员
  71. // v 输出数组中的 "键值" 对组成的数组
  72. // .keys()
  73. // v 输出数组中的 "键" 对组成的数组
  74. // .values()
  75. // v 输出数组中的 "值" 对组成的数组
  76. // ! 默认调用values(),输出值
  77. // for (let 变量 of 数组.entries()) {
  78. // console.log(变量);
  79. // }
  80. // 上面这个变量,也是数组成员的意思
  81. // for -of是针对数组使用
  82. for (let shuzu of niuniu.entries()) {
  83. console.log(shuzu);
  84. }
  85. for (let shuzu of niuniu.keys()) {
  86. console.log(shuzu);
  87. // 提取键
  88. }
  89. for (let shuzu of niuniu.values()) {
  90. console.log(shuzu);
  91. // 提取的键值对的对
  92. }
  93. for (let shuzu of niuniu) {
  94. console.log(shuzu);
  95. // 默认提取的键值对的对
  96. }
  97. // for -in是针对对象使用
  98. // 遍历对象跟遍历数组稍微有一点不同;
  99. // 遍历对象是以下写法;
  100. // for (let 变量/数组成员 in 数组) {
  101. // console.log(数组[变量/数组成员]);
  102. // }
  103. // 上面这个变量也是数组成员的意思
  104. let niuniu1 = {
  105. name: "名字",
  106. name2: "名字2",
  107. name3: "名字3",
  108. };
  109. for (let shuzu1 in niuniu1) {
  110. console.log(niuniu1[shuzu1]);
  111. }
  112. for (let shuzu of niuniu.values()) {
  113. console.log(shuzu);
  114. }
  115. // 数组数组 数组 数组也是对象
  116. for (let shuzu2 in niuniu) {
  117. console.log(niuniu[shuzu2]);
  118. }

函数的参数与返回值

  1. //函数的参数与返回值
  2. //函数的参数返回值不足的情况
  3. let ad = (a, b) => a + b;
  4. console.log(ad(1, 2));
  5. console.log(ad(1));
  6. ad = (a, b = 0) => a + b;
  7. console.log(ad(1));
  8. console.log(ad(5, 5));
  9. // 在参数返回值不足的情况下,给当前函数对象一个默认返回值即可
  10. ad = function mingzi(a, b = 0) {
  11. return a + b;
  12. };
  13. console.log(ad(1, 2));
  14. function mingzi(a, b) {
  15. return a + b;
  16. }
  17. console.log(mingzi(1, 2));
  18. // 以上为非简体写法
  19. ad = (a, b) => a + b;
  20. console.log(ad(1, 2, 3, 4, 5));
  21. // 1+2=3,所以只能显示2个
  22. // 显示只显示前俩 后面的并没有显示
  23. // 将多余的数字,可以以数组的方式全部接收
  24. // ! ...: rest语法,剩余参数,归并参数,将所以参数全部压入到一个数组中
  25. ad = (...c) => c;
  26. console.log(ad(1, 2, 3, 4, 5, 6));
  27. // 将所有的数字,压缩成数组,放到...c中
  28. // 将集合数据展开
  29. console.log(...[1, 2, 3, 4, 5]);
  30. let ad1 = [1, 2, 3, 4, 5, 6, 7, 8];
  31. console.log(...ad1);
  32. ad = (a, b, ...shuzu) => `${a},${b},${shuzu}`;
  33. console.log(ad(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
  34. let f = (...arr) => arr.reduce((a, c) => a + c);
  35. console.log(f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
  36. //没学高阶函数,那就先给老师的讲解进行还原
  37. f = function (...arr) {
  38. return arr.reduce(function (a, c) {
  39. return a + c;
  40. });
  41. };
  42. console.log(f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
  43. // 从服务器API接口获取到了个商品列表: JSON数组
  44. const list = ["笔记本电脑", "小米12手机", "佳能 EOS-R相机"];
  45. console.log(list);
  46. // 将每个商品,套上html标签,最终渲染到html页面中
  47. f = (...items) => items.map(item => `<li>${item}</li>`).join("");
  48. console.log(f(...list));
  49. // document.body.innerHTML = "<ul>" + f(...list) + "</ul>";
  50. qq = function (...items) {
  51. return items
  52. .map(function (item) {
  53. return `<li>${item}</li>`;
  54. })
  55. .join("");
  56. };
  57. console.log(qq(...list));
  58. // ! 返回值
  59. // p 函数默认:'单值返回'
  60. // y 如何返回多个值?
  61. // 数组
  62. qq = () => [1, 2, 3, 4, 5];
  63. console.log(qq());
  64. // 拆分处理
  65. console.log(...qq());
  66. // 结合for of循环提取键跟值
  67. for (let tiqu of qq().entries()) {
  68. console.log(tiqu);
  69. }
  70. for (let tiqu of qq().keys()) {
  71. console.log(tiqu);
  72. }
  73. console.log(qq());
  74. // 对象
  75. qq = () => ({ name: "名字", Name: "名字2", nAme: "名字三" });
  76. console.log(qq());
  77. // 还原以上函数
  78. //对象
  79. let qq1 = function () {
  80. return { name: "名字", Name: "名字2", nAme: "名字三" };
  81. };
  82. console.log(qq1());
  83. // 结合for in循环提取
  84. for (let tiqu in qq1()) {
  85. console.log(qq1()[tiqu]);
  86. }

对象字面量的简化

  1. //对象字面量的简化 推荐使用部分
  2. //先声明一个变量
  3. let name = "小明";
  4. let a = {
  5. name: name,
  6. };
  7. console.log(a.name);
  8. // 简化
  9. a = {
  10. name,
  11. };
  12. console.log(a.name);
  13. // 不加this返回的是数组的值
  14. a = () => name;
  15. console.log(a());
  16. // 方法简化 对象内有数组的情况
  17. a = {
  18. name,
  19. ab: function () {
  20. return a.name;
  21. },
  22. };
  23. console.log(a.ab());
  24. a = {
  25. name,
  26. ab: function () {
  27. return this.name;
  28. },
  29. };
  30. console.log(a.ab());
  31. // 简写
  32. a = {
  33. name,
  34. ab: () => a.name,
  35. ac() {
  36. return this.name;
  37. },
  38. };
  39. console.log(a.ab());
  40. console.log(a.ac());

模板字面量与模板函数

  1. //模板字面量与模板函数
  2. // 模板字面量
  3. // 传统如下:
  4. console.log("你好啊php");
  5. // 模板字面量可以在传统的代码中插入插值
  6. let php = "php";
  7. console.log(php);
  8. console.log("你好" + php);
  9. console.log(`你好${php}`);
  10. // 还可以进行计算使用
  11. console.log(`1+1=${1 + 1}`);
  12. //甚至可以放入块元素
  13. console.log(`${10 > 1 ? `大于` : `小于`}`);
  14. // 当函数声明使用函数模板时,函数声明内的第一个对象变为数组,后面的为值
  15. // function name(string, y, q) {
  16. // console.log(string);
  17. // console.log(y, q);
  18. // let jiage = ` ${string[0]} ${y} ${string[1]} ${q} ${string[2]} ${y * q}${string[3]} `;
  19. // console.log(jiage)
  20. // }
  21. // let y = 10;
  22. // let q = 20;
  23. // name`当前的蔬菜价格单价为${y}数量为${q}总价格为 ${y * q}元`;
  24. function name(string, y, q) {
  25. console.log(string);
  26. console.log(y, q);
  27. let jiage = ` ${string[0]} ${y} ${string[1]} ${q} ${string[2]} ${y * q}${string[3]} `;
  28. console.log(jiage);
  29. }
  30. let y = 10;
  31. let q = 20;
  32. // 使用函数模板时不需要加(),如下 name``;
  33. name`当前的蔬菜价格单价为${y}数量为${20}总价格为 ${y * q}元`;
  34. // name();
  35. // name``;
  36. // console.log(name(1, y, q));