博客列表 >解构赋值与流程控制

解构赋值与流程控制

咸鱼老爷
咸鱼老爷原创
2021年03月01日 18:27:52523浏览

值传递与引用传递

  • 1.赋值
  • 1.1 值传递:原始类型,string,number,bool
    1. let a = 1;
    2. let b = a;
    3. console.log('a=%d,b=%d', a, b);
    4. // 更新a,b不受影响
    5. a = 2;
    6. console.log('a=%d,b=%d', a, b);
  • 1.2 引用传递:引用类型,object,array
    1. let obj1 = {
    2. a: 1,
    3. b: 2
    4. };
    5. console.log(obj1);
    6. let obj2 = obj1;
    7. console.log(obj2);
    8. // 更新obj1
    9. obj1.a = 10;
    10. obj1.b = 11;
    11. console.log(obj1);
    12. //obj2同步更新
    13. console.log(obj2);
  • 2.传参
    传参时,不论什么类型,都是值传递
    入参:调用函数是传入的参数。函数中对参数的更新并不会影响到入参
    对于引用类型,只有全新赋值才算是更新,修改属性不算。
  • 3.深拷贝:值传递
  • 4.浅拷贝:引用传递

    模板字面量与标签函数

  • 1、模板字面量:将表达式嵌入到字符串;`
    1. let a = 1,
    2. b = 2;
    3. let res = a + "+" + b + "=" + (a + b);
    4. console.log(res);
    5. // 模板字面量使用反引号:'`';
    6. res = `${a}+${b}=${a+b}`;
    7. console.log(res);

模板字面量使用反引号”`”;
模板字面量的组成:

  • 字符串字面量:+,=;
  • 变量表达式: a,b,(a+b);
    模板字面量创建多行字符串可以保留格式
    1. let menu = ['首页', '系统', '新闻', '产品'];
    2. let htmlStr = `
    3. <ul>
    4. <li>${menu[0]}</li>
    5. <li>>${menu[2]}</li>
    6. <li>>${menu[2]}</li>
    7. <li>>${menu[3]}</li>
    8. </ul>
    9. `;
    10. console.log(htmlStr);
  • 2、标签函数:自定义模板字面量的行为
    使用自定义函数来处理模板字面量,它的参数约定:
  • 第一个参数:模板字面量中的字符串字面量组成的数组;
  • 从第二个参数开始,将模板字面量中的变量以此传入;

    解构赋值

    解构赋值:快速冲集合数据(数组/对象)解构出独立变量
  • 1、数组
    1. let [a, b, c] = [1, 2, 3];
    2. console.log(a, b, c);
    3. [a, b] = [1, 2, 3]
    4. console.log(a, b);
    5. [a, b, c, d = 4] = [1, 2, 3]
    6. console.log(a, b, c, d);
    7. [a, b, ...c] = [1, 2, 3, 4, 5, 6, 7];
    8. console.log(a, b, c);
    9. //单独取一个值
    10. [, , c, ] = [1, 2, 6, 4]
    11. console.log(c);
    12. //交换
    13. [y,x]=[x,y];
  • 2、对象解构
    1. let {
    2. id,
    3. name
    4. } = {
    5. id: 10,
    6. name: '手机'
    7. };
    8. console.log(id, name);
    9. ({
    10. name,
    11. id
    12. } = {
    13. id: 10,
    14. name: '手机'
    15. });
    16. console.log(id, name);
    17. let email = 'admin@qq.com';
    18. let {
    19. role,
    20. //取别名
    21. email: userEmail
    22. } = {
    23. role: 'user',
    24. email: 'user@qq.com'
    25. };
    26. console.log(userEmail);
    27. console.log(email);
  • 3、参数解构
    数组传参
    1. let sum = ([a, b]) => a + b;
    2. console.log(sum([1, 2]));
    对象传参
    1. let getUser = ({
    2. name,
    3. email
    4. }) => [name, email];
    5. console.log(getUser({
    6. email: 'admin@admin.com',
    7. name: '系统管理员'
    8. }));

箭头函数中的this总是指向定义它时的作用域(静态作用域|词法作用域),而非调用时的作用域;

流程控制

  • 1、if else
    1. let score = 59;
    2. if (score >= 90) {
    3. console.log('优秀');
    4. } else if (score >= 80) {
    5. console.log('良好');
    6. } else if (score >= 70) {
    7. console.log('合格');
    8. } else if (score >= 60) {
    9. console.log('及格');
    10. } else {
    11. console.log('不及格');
    12. }
  • 2、switch 简化多分支的if else
    区间判断 switch(true);
    1. let score = 80;
    2. switch (true) {
    3. case score >= 90:
    4. console.log('优秀');
    5. break;
    6. case score >= 80:
    7. console.log('良好');
    8. break;
    9. case score >= 70:
    10. console.log('合格');
    11. break;
    12. case score >= 60:
    13. console.log('及格');
    14. break;
    15. default:
    16. console.log('补考');
    17. }
    单值
    1. let status = 'success';
    2. switch (status) {
    3. case 'ok':
    4. console.log('成功');
    5. break;
    6. case 'fail':
    7. console.log('失败');
    8. break;
    9. default:
    10. console.log('未知错误');
    11. }
  • 3、 三元运算符
    ?:
    1. let score=80;
    2. console.log(score>=80?'合格':'补考');
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议