Blogger Information
Blog 70
fans 1
comment 0
visits 52932
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
值|引用传递-数组|对象解构-call|apply|bind-访问器-流程控制
葡萄枝子
Original
728 people have browsed it

值|引用传递-数组|对象解构-call|apply|bind-访问器-流程控制

  1. 实例演示值传递与引用传递的区别与联系;
  2. 数组和对象解构的常用方法与函数传参
  3. call,apply,bind的区别与联系,并试着实例演示一下
  4. 访问器属性的原理与实现过程,并实例演示;
  5. 多分支与switch转换的技巧
  6. 三元运算解决了什么问题,有什么限制?

1. 实例演示值传递与引用传递的区别与联系

  • 值传递:原始类型 string, number, bool 等
  • 引用传递:引用类型 object, array 等
  • 深拷贝是值传递,浅拷贝是引用传递,传参是值传递
  1. // 值传递
  2. let a = 1;
  3. let b = a;
  4. // a = 1, b = 1
  5. console.log('a = %d, b = %d', a, b);
  6. a = 2;
  7. // 更新 a ,不影响 b 返回 a = 2, b = 1
  8. console.log('a = %d, b = %d', a, b);
  9. // 引用传递
  10. a = {x: 1, y: 2};
  11. b = a;
  12. // {x: 1, y: 2} {x: 1, y: 2}
  13. console.log(a, b);
  14. a.x = 2;
  15. // 更新对象 a ,对象 b 也更新
  16. // {x: 2, y: 2} {x: 2, y: 2}
  17. console.log(a, b);

值传递与引用传递

2. 数组和对象解构的常用方法与函数传参

  1. // 数组解构
  2. let [x, y, z = 3] = [1, 2];
  3. // 解构到 x, y, z 变量中
  4. // x = 1, y = 2, z = 3
  5. console.log('x = %d, y = %d, z = %d', x, y, z);
  6. // 对象解构
  7. let {x1, y1, z1 = 'three'} = {x1: 'one', y1: 'two'};
  8. // 解构到 x1, y1, z1 中
  9. // x1 = one, y1 = two, z1 = three
  10. console.log('x1 = %s, y1 = %s, z1 = %s', x1, y1, z1);
  11. // 函数传参
  12. // 数组传参
  13. let linkArr = ([a, b, c]) => `${a} | ${b} | ${c}`;
  14. // 1 | 2 | 3
  15. console.log(linkArr([x, y, z]));
  16. // 对象传参
  17. let linkObj = ({x1, y1, z1}) => `${x1} | ${y1} | ${z1}`;
  18. // one | two | three
  19. console.log(linkObj({x1, y1, z1}));

数组和对象解构

3. call,apply,bind的区别与联系,并试着实例演示一下

  • bind 绑定,返回一个函数声明,不会立即执行
  • call 和 apply 立即执行
  1. let test = function ( arg ) {
  2. return arg;
  3. };
  4. const testObj = {
  5. arg: 'args',
  6. };
  7. // 返回 Hi!
  8. console.log(test('Hi!'));
  9. // bind 返回一个函数声明,不会立即执行
  10. let f1 = test.bind(testObj, 'bind');
  11. // 返回 bind
  12. console.log(f1());
  13. // call | apply立即执行
  14. let f2 = test.call(testObj, 'call');
  15. // 返回 call
  16. console.log(f2);
  17. // 返回 apply
  18. let f3 = test.call(testObj, 'apply');
  19. console.log(f3);

bind-call-apply

4. 访问器属性的原理与实现过程,并实例演示

访问器:将方法伪造成一个属性,访问器属性优先级高于同名的普通属性

  1. const result = {
  2. data: {
  3. id: 1,
  4. meta: 'desc',
  5. },
  6. // 访问器,方法伪造成一个属性,取值
  7. get getId() {
  8. return this.data.id;
  9. },
  10. get getMeta() {
  11. return this.data.meta;
  12. },
  13. // 访问器,方法伪造成一个属性,赋值
  14. set setID(num) {
  15. this.data.id = num;
  16. },
  17. set setMeta(value) {
  18. this.data.meta = value;
  19. },
  20. }
  21. // 访问器,伪造的属性赋值
  22. result.setID = 2;
  23. result.setMeta = 'test';
  24. // 访问器,伪造的属性取值
  25. // getID = 2, getMeta = test
  26. console.log('getID = %s, getMeta = %s', result.getId, result.getMeta);

访问器属性

5. 多分支与switch转换的技巧

  1. // If 多分支
  2. let score = num => {
  3. if (num >= 0 && num < 60) return '不及格';
  4. else if (num >= 60 && num < 80) return '合格';
  5. else if (num >=80 && num <= 100) return '优秀';
  6. else if (num < 0 || num > 100) return '非法';
  7. }
  8. // 返回:非法 不及格 合格 优秀 非法
  9. console.log(score(-1), score(50), score(60), score(100), score(101));
  10. // switch来简化多分支
  11. score = num => {
  12. switch(true) {
  13. case num >= 0 && num < 60:
  14. return '不及格';
  15. // return 无需 break;
  16. case num >= 60 && num < 80:
  17. return '合格';
  18. case num >=80 && num <= 100:
  19. return '优秀';
  20. default:
  21. return '非法'
  22. }
  23. }
  24. // 返回:非法 不及格 合格 优秀 非法
  25. console.log(score(-1), score(50), score(60), score(100), score(101));
  26. // If 单值判断
  27. let response = status => {
  28. if (status.toLowerCase() === 'fail') {
  29. return '请求失败!';
  30. } else if (status.toLowerCase() === 'success') {
  31. return '请求成功!';
  32. } else {
  33. return '非法请求!';
  34. }
  35. }
  36. // 返回 请求成功!
  37. console.log(response('SUCCESS'));
  38. // switch 单值判断
  39. response = status => {
  40. switch(status.toLowerCase()) {
  41. case 'fail': return '请求失败!';
  42. case 'success': return '请求成功!';
  43. default: return '非法请求!';
  44. }
  45. }
  46. // 返回 请求成功!
  47. console.log(response('SUCCESS'));

多分支与switch转换

6. 三元运算解决了什么问题,有什么限制?

  • 三元运算解决了双分支的简化,也可以多分支,但不适合于没有返回值的判断。
  1. let status = 'SUCCESS';
  2. let res = status.toLowerCase() === 'fail' ? '请求失败!' : (status.toLowerCase() === 'success' ? '请求成功!' : '非法请求!');
  3. // 返回 请求成功!
  4. console.log(res);

三元运算

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments