微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ES6 基础总结

一、形参的值由函数调用时传入的实参决定

        //以前的写法
        function add(x, y) {
            if (typeof x == "undefined") {
                x = 1
            }
            if (typeof y == "undefined") {
                y = 1
            }
            return x + y;
        }
        console.log(add(0, 1)); //  1
        //ES6的写法  :更加简便
        function addES6(x = 1, y = 1) {
            return x + y;
        }
        console.log(addES6(5)); //  6

认格式:

函数(形参1=认值1,形参2=认值2){

}

【注意】

1.如果参数中有的有认值有的没有认值,那么必须将有认值的放在后面。

2.函数如果有认值,小括号可以理解为一个作用域。

        function addES6(x=1,y=1){
            return x+y;
        }
        console.log(addES6());//2

  【了解即可】  函数的length属性:没有设置认值的参数的个数。

  // 函数的length属性:没有设置认值的参数的个数。

        function addES6(x = 1, y = 1) {
            return x + y;
        }
        console.log(addES6.length); // 0

二、ES6引入的rest参数

形式为:...变量名

作用:获取函数的多余参数。

ES6中的可以使用rest参数来替代arguments.

arguments本身是一个对象,不是一个数组,不能使用数组的方法,而rest是一个真正的数组。

rest的语法格式为:
函数(...变量名){

函数体

}

三、扩展运算符

作用:将数组拆分为多个数组

...运算符

作用:使用逗号拆分数组或对象

格式:...变量

应用:

1.将伪数组转为真正的数组      [...伪数组]

2.合并数组        [...数组1,...数组2]

四、箭头函数

定义:匿名函数表达式的一种方式。

箭头函数的语法格式:
(形参)=>{

函数体

}

 声明式函数

// 声明式函数
fn();  //声明式函数

function fn(){

console.log("声明式函数");

}

 函数表达式

// 函数表达式

fn1();  // Uncaught TypeError: fn1 is not a function

var fn1=function(){

console.log("函数表达式");

}

 声明式函数函数表达式之间的区别:

声明式函数可以直接在使用之前调用函数表达式创建的函数不能在函数表达式之前调用,会报错显示不是一个函数

箭头函数

// 箭头函数:

var fn2=()=>{

console.log("箭头函数");

}

fn2();  //箭头函数

【注意】

1.如果箭头函数只有一个形参,那么小括号可以省略。

2.如果只有一个表达式,可以省略大括号和return,认返回表达式的结果。

3.箭头函数中没有arguments对象

4.箭头函数中的this由父级作用域决定。

5.箭头函数中的this指向无法被修改(call、apply、bind)

// 如果箭头函数只有一个形参,那么小括号可以省略
var show=value=>{
    console.log("箭头函数");
}
show();//箭头函数

// 如果只有一个表达式,可以省略大括号和return
 var show=value=> value+2;
// console.log(typeof show);
 var x=show(1);
 console.log(x); //3

四、this指向的总结:

1.在全局函数中,this指向window。

2.在普通函数中,this指向调用者。

3.在构造函数中,this指向实例对象。

4.在事件函数中,this指向事件源。

5.在定时器中,this指向window。

6.在箭头函数中,this指向父作用域中的this。

五、数组的扩展

   1. map:映射的意思: 将原数组映射为新的数组。 map必须有返回值,没有返回值,新数组的元素都是undefined     

   arr = arr.map(item => item * 2);

        console.log(arr); //[2, 4, 8, 10, 12, 14]

        2. Array.form()方法可以将类似于数组的对象转化为真正的数组,比如说伪数组,arguments。

        // 如果是一个对象,必须要有length属性才可以转化为数组,

        // 如果length比属性个数值多时,多生成的元素输出为undefined

        //  如果length比属性个数值少时,多生成的元素输出为undefined

        // 2. length比属性个数要少, 只会生成前length个元素,下标从0开始计算到给出的length值   

     var lis = document.querySelectorAll('li');

        console.log(Array.from(lis)); //[li, li, li, li, li]

        var arrLike = {

            "1": "h",

            "2": "e",

            "3": "l",

            "4": "l",

            "0": "o",

            length: 5

        }

        console.log(Array.from(arrLike)); //["o", "h", "e", "l", "l"]

        /* 3. Array.of方法:用于将一组数值转换为数组。目的:创建数组,用来代替new Array();

         */    

    var arr = Array.of(5, {

            age: 20

        }, true, "20");

        console.log(arr); //[5, {…}, true, "20"]0: 51: {age: 20}2: true3: "20"length: 4__proto__: Array(0)

        /* 

       4. copyWithin():在当前数组内部,将指定位置的成员复制到其他位置,复制会替换原有成员,返回当前数组。 会修改原数组。

   * 参数:

   *  1.(必须)从该位置开始替换数据。

   *  2.(可选)从该位置开始读取数据,认值是0、

   *  3.(可选)到该位置停止读取数据。认值是数组的长度。如果是负数,表示倒数。最后一个值的位置是-1。

   * 

   *  含头不含尾

        */    

    var arr = [1, 2, 3, 4, 5, 6];

        arr.copyWithin(0, 3, arr.length);

        console.log(arr); // [4, 5, 6, 4, 5, 6]

          5.  filter(callBack): 遍历过滤出一个新的数组,数组中包含的是返回条件为true的值。

   var arr = [1, 2, 3, 4, 5, 6];

        var arr2 = arr.filter(item => item > 3)

        console.log(arr2); // [4, 5, 6]

         6. every(callBack) 数组中的元素全部满足判断条件,如果都满足则返回true,否则返回false;

  var arr = [1, 2, 3, 4, 5, 6];

        var flag = arr.every(item => item > 3);

        // var flag = arr.every(item => item > 0);

        // console.log(flag); //true

        console.log(flag); //false

        7.  some(callBack) 数组中的元素只要有一个满足判断条件,则返回true,如果都不满足,返回fasle。    

  var arr1 = [1, 2, 3, 4, 5, 6];

        var flag1 = arr1.some(item => item > 3);

        console.log(flag1); //true

        var flag1 = arr1.some(item => item > 6);

        console.log(flag1); //false

        8.   includes(值) 判断数组中是否有指定的值。如果有,返回true,没有返回false。

     include和indexof的区别:indexof返回的是下标,如果要判断是否存在 要与-1比较。

  var arr1 = [1, 2, 3, 4, 5, 6];

        var flag1 = arr1.includes(6);

        console.log(flag1); //true

           9.  find(callBack) :找到第一个符合条件的元素。

 var arr1 = [1, 2, 3, 4, 5, 6];

        var flag1 = arr1.find(item => item > 5);

        console.log(flag1); //6

        /*10. findindex(callBack):找到第一个符合条件的元素的下标。 */     

   var arr1 = [1, 2, 3, 4, 5, 6];

        var flag1 = arr1.findindex(item => item > 3);

        console.log(flag1); //3

六、对象的扩展:

属性简写:如果属性值是一个变量,且变量名与属性名相同,则可以只写属性名。

方法简写:

以前的写法:   方法名:function(){}

现在的写法:    方法名(){}

七、数据结构的扩展

              ES6提供了两个新的数据结构:Set 和 Map。

            1.  set:类似于数组。它只有属性值,而且值是唯一的。

              可以在set创建的时候,在构造函数中传入一个数组作为参数。

              利用set里面的值不重复的特性,可以对数组去重。 arr = Array.from(new Set(arr));

 var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6];
        var set = new Set(arr);
        arr = Array.from(set);
        console.log(arr);  //[1, 2, 3, 4, 5, 6]     祛除重复的数字

              属性 

                size:  set中元素的个数。

      var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6];
        var set = new Set(arr);
        // arr = Array.from(set);
        // console.log(arr); //[1, 2, 3, 4, 5, 6]
        console.log(set);

              方法

                增:

                  add(value):将value添加到Set中。返回set本身。

        var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6];
        var set = new Set(arr);
        set.add(10);
        console.log(set);  // {1, 2, 3, 4, 5, 6,10}

                删:

                  clear(): 清除所有成员

        var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6];
        var set = new Set(arr);
        set.clear();
        console.log(set); //{}

                  delete(value) :删除指定的值

 var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6];
 var set = new Set(arr);
 set.delete(3);
 console.log(set); //{1, 2, 4, 5, 6}

                查:

                  has(value) : 返回一个布尔值,如果value存在在set中,返回true。


        var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6];
        var set = new Set(arr);
        console.log(set.has(6)); //true

        var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6];
        var set = new Set(arr);
        console.log(set.has(18)); //false

              遍历set:

                for (const 当前遍历的变量 of 要遍历的数据结构) {                 

                }

    //iterator:迭代器
        // 遍历
        var arr = [1, 2, 3, 4, 5, 6, 5, 3, 6];
        var set = new Set(arr);
        for (const iterator of set) {

            console.log(iterator);
        }

 

                foreach

        var arr = [1, 2, 7, 9, 5, 6, 5, 3, 6];
        var set = new Set(arr);
        set.forEach(element => {
            console.log(element);
        });

 

 

2. map:由键值对组成的。 不允许键重复,值可以重复。如果键重复了,就会将原来的值覆盖掉。

    创建map: new Map();

    增:

      set(k,v) k可以为任意类型。用的最多的是字符串。v也是可以为任意类型。

        let map = new Map();
        map.set("偶像", "爱因斯坦");
        // map.set("偶像", "张国荣");
        console.log(map);  //Map(1) {"偶像" => "爱因斯坦"}
 //两次输出的k值不能相同,否则会被新的覆盖掉,只显示最新的map.set中的值。    
 let map = new Map();
 map.set("偶像", "爱因斯坦");
 map.set("偶像大大", "张国荣");  
 console.log(map);

 

@H_96_404@

    删:

      delete(k)

        let map = new Map();
        map.set("偶像", "爱因斯坦");
        map.set("偶像大大", "张国荣");
        map.set("不是偶像", "蔡徐坤");
        map.delete("不是偶像");
        console.log(map); //Map { "偶像" → "爱因斯坦", "偶像大大" → "张国荣" }

    改:

      set(k,v) k为要修改的数据的k,v为修改后的内容

        let map = new Map();
        map.set("偶像", "爱因斯坦");
        map.set("偶像", "蔡元培");
        console.log(map); //Map { "偶像" → "蔡元培"}

    查:

      get(k)  k 为要获取数据的k。​​​​​​​

        let map = new Map();
        map.set("偶像", "蔡元培");
        map.set("偶像大大", "张国荣");
        var result = map.get("偶像");
        console.log(result); //  蔡元培

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐