经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
ES6学习-6 解构赋值(3)解构赋值的应用
来源:cnblogs  作者:郭郭老师  时间:2021/5/31 9:08:20  对本文有异议

已学习了数组解构赋值和对象解构赋值,下面我们来看一下解构赋值都可以应用在哪些地方。

函数参数的解构 - 数组参数 ,栗子:

  1. function add([a, b]){
  2. return a + b;
  3. }
  4. console.log(add([1, 2])); //控制台输出3
函数add的参数是一个解构表达式,不是数组,传入数组参数后,被解构为变量 a,b。个人觉得这种用法没有什么卵用,写成下面的形式不香吗?
  1. function add(a, b){
  2. return a + b;
  3. }
  4. console.log(add(1, 2)); //控制台输出3

函数参数的解构 - 对象参数,栗子:

  1. function move({x = 0, y = 0} = {}) {
  2. return [x, y];
  3. }
  4. move({x: 3, y: 8}); // [3, 8]
  5. move({x: 3}); // [3, 0]
  6. move({}); // [0, 0]
  7. move(); // [0, 0]

这种写法真的是蛋疼,函数的参数到底是哪一部分呢?我们先来说一下这个问题。函数的参数是一条解构表达式 {x=0,y=0}=后面的 {} 实际上是参数的默认值。函数的参数可以设置默认值,是ES6的新特性。顺便举个函数默认值的栗子,方便理解上面的栗子。

  1. function guoguo(youname="郭郭",youage=18) {
  2. console.log("youname is "+youname+" youage is "+youage);
  3. }
  4. guoguo(); //没有传参数,两个参数都取默认值,控制台输出 youname is 郭郭 youage is 18
  5. guoguo("郭大剑"); //传了一个参数,第二个参数取默认值,控制台输出 youname is 郭大剑 youage is 18
  6. guoguo("郭大剑",39); //传了二个参数,两个参数默认值都不起作用,控制台输出 youname is 郭大剑 youage is 39

需要非常注意的一点,用对象解构表达式作为函数的参数时,一定要设置一个默认值。如果没有默认值,调用函数时不传参数,会导致解构报错。上面的栗子稍微改一下,去掉默认值看看效果。

  1. function move({x = 0, y = 0}) {
  2. return [x, y];
  3. }
  4. console.log( move({x: 3, y: 8})); // [3, 8]
  5. console.log( move({x: 3})); // [3, 0]
  6. console.log( move({})); // [0, 0]
  7. console.log( move()); //TypeError: Cannot read property 'x' of undefined 无法解构,导至引用x变量报错。

函数使用对象解构参数,可以很方便的设置各种默认值,而且参数顺序没有限制,只要可以成功解构即可,用处还是很大的。

下面列举一些解构赋值的应用场合:

  1. //此处谢谢阮一峰兄弟,这些例子我都是抄他的
  2. //快速从返回的数组中取数
  3. function example() {
  4. return [1, 2, 3];
  5. }
  6. let [a, b, c] = example();
  7. //快速从JSON中提取数据
  8. let jsonData = {
  9. id: 42,
  10. status: "OK",
  11. data: [867, 5309]
  12. };
  13. let { id, status, data} = jsonData;
  14. //遍历map
  15. const map = new Map();
  16. map.set('first', 'hello');
  17. map.set('second', 'world');
  18. for (let [key, value] of map) {
  19. console.log(key + " is " + value);
  20. }
  21. //获取键
  22. for (let [key] of map) {
  23. // ...
  24. }
  25. //获取键值
  26. for (let [,value] of map) {
  27. // ...
  28. }

 

 

 

 

 

 

 

原文链接:http://www.cnblogs.com/daguoguo/p/14811365.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号