• ECMAScript6 学习笔记


      1、let和const

      在《JavaScript(9):var、let、const》中总结了var、let、const的用法与区别。

      总结起来就那么几点:

      ⑴ let和const在同一作用域当中是不能重复声明的。
      ⑵ let、const属于块级作用域,一对{}就是一个块。
      ⑶ let声明的变量是可以改变的;const声明的变量则不行。如果将一个对象定义为const,那么这个对象就不能重新赋值(对象为引用类型),但是对象的属性和方法是可以改变的。

      2、变量的解构

      ⑴ 数组的解构不成功,则变量的值就是 undefined。
      ⑵ 对象的解构,对象的解构赋值是先找到同名属性,然后再付给对应的变量。
      ⑶ 数组和对象解构时可以赋予初始默认值。

    1. //数组的解构
    2. let [x,y,k]=[5,'111',true];
    3. console.log(x);
    4. console.log(y);
    5. console.log(k);
    6. let [m=1,n=2]=[,99];
    7. console.log(m);
    8. console.log(n);
    9. //对象的解构
    10. const obj={
    11. name:'KKK',
    12. age:undefined,
    13. SayHello:function(){
    14. console.log(`我是${name},今年${age}岁。`);
    15. }
    16. };
    17. let {name='123',age=12,SayHello}=obj;
    18. console.log(name);
    19. console.log(age);
    20. SayHello();
    21. 输出结果:
    22. 5
    23. 111
    24. true
    25. 1
    26. 99
    27. KKK
    28. 12
    29. 我是KKK,今年12岁。

      3、模版字符串

    1. console.log( `第一行的\n第二行的`);
    2. let str=`第一行的描述
    3. 第二行的描述。`
    4. console.log(str);
    5. let sname="poly";
    6. let iage=12;
    7. console.log(`名字是${sname+"COM"},今年${iage+11}岁。`);
    8. 输出结果:
    9. 第一行的
    10. 第二行的
    11. ES6_1.html:35 第一行的描述
    12. 第二行的描述。
    13. ES6_1.html:38 名字是polyCOM,今年23岁。

      4、对象的简化写法

      在描述对象的大括号里面,直接写变量和函数作为对象的属性和方法。

    1. const obj={
    2. name:'123',
    3. age:12,
    4. SayHello(){
    5. console.log(this);
    6. console.log(`我是${this.name},今年${this.age}岁。`)
    7. console.log(`我是${obj.name},今年${obj.age}岁。`)
    8. }
    9. }
    10. obj.name="Json";
    11. obj.age=9;
    12. obj.SayHello();
    13. 输出结果:
    14. {name: 'Json', age: 9, SayHello: ƒ}
    15. 我是Json,今年9岁。
    16. 我是Json,今年9岁。

      5、rest参数

      ECMAScript5的函数内部可以通过arguments来获取参数,arguments是对象而不是数组。
      对于ECMAScript6而言:
      ⑴ 函数内部可以通过args来获取参数,args是数组。
      ⑵ ECMAScript6引入rest参数也是为了方便获取函数的参数,注意rest参数一定要放在参数列表的最后。

    1. console.log("---------ECMAScript5 函数传参与获取参数-------------------------");
    2. function func(){
    3. console.log(arguments);
    4. console.log("参数类型:" + typeof arguments);
    5. console.log(arguments instanceof Array);//不是数组类型
    6. for (var i = 0; i < arguments.length; i++) {
    7. console.log(arguments[i]);
    8. }
    9. console.log("参数类型:" + arguments.length);
    10. //转换为数组
    11. // let args = [];
    12. // for (let i = 0; i < arguments.length; i++) {
    13. // args.push(arguments[i]);
    14. // }
    15. //转换为数组
    16. args=Array.prototype.slice.apply(arguments);// args=Array.prototype.slice.call(arguments);
    17. console.log(args);
    18. }
    19. func(1,"abc");
    20. console.log("---------ECMAScript6 rest参数-------------------------");
    21. function es6func(...args){
    22. console.log(args);
    23. console.log("参数类型:" + typeof args);
    24. console.log(args instanceof Array);//是数组类型
    25. args.forEach( (item , index ) => {
    26. console.log( item, index )
    27. })
    28. }
    29. es6func("XML","JSON","TXT");
    30. let tools=["VSCode","HBuilder","Idea"];
    31. es6func(...tools);
    32. function add(a,b,...args){
    33. console.log(args);
    34. }
    35. add(1,2,3,4,5);

      输出结果:

       6、...扩展运算符

      ⑴ 通过...扩展运算符将伪数组的对象转换为数组。

    1. function func(){
    2. console.log(arguments instanceof Array);//不是是数组类型
    3. console.log(...arguments);
    4. let argsArr=[...arguments];//转换为数组
    5. console.log(argsArr);
    6. console.log(argsArr instanceof Array);//是数组类型
    7. }
    8. func(1,2,3,4);
    9. const selectP=document.querySelectorAll("p");
    10. const ArrP=[...selectP];//转换为数组
    11. console.log(ArrP);
    12. for (let i = 0; i < ArrP.length; i++) {
    13. console.log(ArrP[i].outerText);
    14. }

      输出结果:

      可以将字符串转换为数组。

    1. let str="123";
    2. console.log([...str]);
    3. 输出结果:
    4. (3) ['1', '2', '3']

      ⑵ 可以用于数组的合并。

    1. let arr1=[1,2,3];
    2. let arr2=['a','b2','c3'];
    3. let arr3=[...arr1,"JavaScript",...arr2];
    4. console.log(arr3);
    5. 输出结果:
    6. (7) [1, 2, 3, 'JavaScript', 'a', 'b2', 'c3']
  • 相关阅读:
    28 行为型模式-中介者模式
    Day06--上拉触底案例-初步实现上拉触底效果
    两个线程交替打印A1B2C3D4E5输出,6种实现方式
    码出高效(一) Java 编程风格规约
    Dell戴尔笔记本电脑灵越系列Inspiron 5598原厂Windows10系统2004
    webgl 系列 —— 初识 WebGL
    第四天 map函数使用说明
    04_RabbitMQ支持消息的模式
    1339. 分裂二叉树的最大乘积-深度优先遍历
    windows系统使用Vscode在WSL调试golang本地进程
  • 原文地址:https://blog.csdn.net/dawn0718/article/details/127078825