博客列表 >let/const和模板解构(0901)

let/const和模板解构(0901)

丶久而旧之丶
丶久而旧之丶原创
2020年10月07日 15:53:11819浏览

let/const模板和解构

let声明

  1. // 1.1var可以重复声明,let不能重复声明
  2. let a;
  3. let a;
  4. // 1.2var会有变量声明提升,let不会,所以也会有可能出现暂时性死区
  5. console.log(username); //出错,因为不会出现变量提升
  6. let username = "小明";
  7. function func() {
  8. let username = "小红";
  9. console.log(username);
  10. }
  11. func();
  12. console.log(username);
  13. // 1.3支持块作用域
  14. if (true) {
  15. let price = 30;
  16. }
  17. // 在外面访问不到price
  18. console.log(price); //出错

const声明

  1. // 2.1常量在一个脚本的声明周期内禁止更新,所以声明的时候必须初始化
  2. const APP_NAME = "管理系统";
  3. // 2.2和let一样不允许重复声明
  4. // 2.3和let一样支持块作用域
  5. // 以后声明变量首选const,如果出现修改数据出现错误时在改为let
  6. // 如果声明对象或者数组时强烈推荐const
  7. const arr = [10, 20, 30];
  8. arr[0] = 50;
  9. arr[1] = 40; //这样更改不会出错
  10. arr[2] = 60;
  11. arr = [10, 40, 70]; 这样才会报错
  12. console.log(arr);
  13. // 更改数组或对象中的属性,值不会报错,只有重新赋值对象或数组会报错
  14. const obj = { x: "admin", y: 123 };
  15. obj.y = 456;
  16. console.log(obj.x, obj.y);

模板解构

  • 解构对象

  1. // 解构的功能--把集合数据按规则打散到独立变量中
  2. const product = {
  3. name: "手机",
  4. price: 4999,
  5. };
  6. // 传统方法
  7. let name1 = product.name;
  8. let price1 = product.price;
  9. console.log("%s: %c %d", name1, "color:lightgreen", price1);
  10. // 模板解构 (等号左边为解构变量声明)--let { name, price }
  11. let { name, price } = product;
  12. console.log("%s: %c %d", name, "color:lightblue", price);
  13. // 没有输入别名的情况下,解构对象时模板解构变量名必须和对象属性名相同
  14. // 解构变量必须初始化,不能只声明(let{a,b};这样是错误的)
  15. // 解构表达式
  16. // 场景1 更新变量数据
  17. let a = 10;
  18. let b = 20;
  19. console.log(a, b);
  20. // 用表达式更新数据
  21. let obj = {
  22. a: 100,
  23. b: 200,
  24. };
  25. ({ a, b } = obj);
  26. console.log(a, b);
  27. // 场景2
  28. function func({ a: x, b: y }) {
  29. console.log(x + y);
  30. }
  31. func(obj);
  32. // 解构声明中设置默认值
  33. const obj1 = {
  34. objName: "admin",
  35. objEmail: "adming@qq.com",
  36. };
  37. const { objName, objEmail = "aaa@qq.com", objAge = 20 } = obj1;
  38. // 有自定义的值则赋自定义值,没有则赋默认值,自定义的值优先级更高
  39. console.log(objName, objEmail, objAge);
  40. // 解构声明中的别名
  41. const obj2 = {
  42. objName: "小明",
  43. objEmail: "xiaoming@qq.com",
  44. };
  45. // 直接解构的话会和上面同名报错所以要用别名
  46. const { objName: objName1, objEmail: objEmail1, objAge: objAge1 = 20 } = obj2;
  47. console.log(objName1, objEmail1, objAge1);
  48. 嵌套对象解构
  49. const obj = {
  50. name: "admin",
  51. course: {
  52. php: {
  53. level: "basis",
  54. grade: 80,
  55. },
  56. javascript: {
  57. level: "advance",
  58. grade: 70,
  59. },
  60. },
  61. };
  62. // 模板解构
  63. const {
  64. course: { php },
  65. } = obj;
  66. console.log(php);
  67. // 嵌套对象的多次解构
  68. const {
  69. name,
  70. course,
  71. course: { php: objphp },
  72. course: { php: { level } },
  73. } = obj;
  74. console.log(name, course, objphp, level);

对象的嵌套解构

  • 数组解构

  1. const arr = [1, "admin", "admin@qq.com"];
  2. // 模板解构
  3. const [id, name, email] = arr;
  4. console.log(id, name, email);
  5. // 也可以只解构其中一两个值
  6. const arr1 = [2, "admin22", "admin22@qq.com"];
  7. const [, username, email1] = arr1;
  8. console.log(username, email1);
  9. // 数组解构表达式
  10. // 更新数据
  11. let a = 10;
  12. let b = 20;
  13. let c = [5, 37];
  14. // 更新a和b的值
  15. [a, b] = c;
  16. console.log(a, b);
  17. // 设置默认值
  18. const arr2 = ["iPhone", "xmax"];
  19. // 和解构对象一样自定义的值优先级更高,有自定义值就赋自定义的值
  20. let [brand, model, color = "green"] = arr2;
  21. console.log(brand, model, color);
  22. // 在函数参数中使用数组解构
  23. function func([x, y]) {
  24. console.log(x + "*" + y + "=" + (x * y));
  25. }
  26. func(c);
  27. // 也可以在参数中设置默认值
  28. function func1([x, y, z = 6]) {
  29. console.log(x + "*" + y + "*" + z + "=" + (x * y * z));
  30. };
  31. func1(c);
  32. // 数组的嵌套解构
  33. const arr3 = [10, [20, [30], 40], 50];
  34. // 解构
  35. const [a1, [a2, [a3], a4], a5] = arr3;
  36. console.log(a1, a2, a3, a4, a5);

总结

1.了解let和const,var声明间的区别
2.对于解构的应用场景和使用有了些了解

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议