day16 ES5和ES6

一、严格模式:

    "use strict";(严格模式下必须要加上这个代码)

         1)定义变量必须要有var

         2)严格模式下,八进制被禁用

               var num = 057;

               alert(num);

        3)arguments与形参不同

              function box(a){

               a++;

               console.log(a,arguments[0]);//非严格模式下结果是6,6

                }                                            //严格模式下结果是6,5

                box(5)

        4)eval()解析在严格模式下有自己的作用域。不被外部访问。

                var a = 3;

                eval("var a = 5");

                alert(a);//3

二、let声明变量

   1) let 不允许重复声明变量;

           let a = 2;

     let a = 4;

     alert(a)//报错

   2) 必须在某个{}内部使用;

          if(true){

    let a = 0;}

    alert(a);//a is not defined

    块级作用域案例:点击某个li,获取li对应的下标

var li = document.getElementsByTagName("li");

    for (let i = 0; i < li.length; i++) {

        li[i].onclick = function(){

            alert(i);//0 1 2

        }

    }

 

    3)let 在函数体内部 声明的变量没有变量提升;

       暂时性死区:通过let声明的变量 变量声明之前该变量不可用,这种现象就称作暂时性死区

        例子1:alert(a)(光标的地方就是暂时性死区)

         let a = 4;//a is not defined

    例子2:function box(){

                       (光标的地方就是暂时性死区)

         alert(a);

        let a = 4;

    }

    box();//a is not defined

三、this详解。(重要)

    1.this的指向:

        1)this指向直接调用它的对象。

        2)函数的回调函数中的this指向window(监听事件除外,它的this指向是对象)

1)普通函数this指向window

 function box(){

        console.log(this);//指向window

    }

box();//指向window

btn.onclick = function(){

        console.log(this);//指向当前对象button(btn)

        box();//指向window

    }

2)对象方法中的this指向当前对象

var obj = {

        name : "tom",

        run : function(){

            console.log(this);//当前对象obj

        }

    }

    obj.run();

    2.this指向的改变

        1)bind(this):可以改变匿名函数内部的this指向 

             btn.onclick = function(){

               setInterval(function(){

               console.log(this);//指向btn

             }.bind(this),1000);   }

        2)call(this):函数调用时可以改变this指向;

              var btn = document.getElementById("btn");

              btn.onclick = function(){

              box.call(this);//指向btn

           box.apply(this);//指向btn

             }

             var box = function(){  ======>   相当于function box(){}

             console.log(this);//指向window

             }

        3)apply(this):函数调用时可以改变this指向;

             var btn = document.getElementById("btn");

              btn.onclick = function(){

               box();

             }

             var box = function(){

             console.log(this);//指向btn

             }.apply(btn);

四、for of :

    var arr = [32,43,45,23,43];

    for(var item of arr){

        console.log(item);//item 遍历得到的item是数组的每一个元素

    }

  for..of与for..in的区别

      a.for in遍历数组得到的是数组的下标,并且下标是字符串

        for of遍历数组得到的是数组的元素。

      b.for in主要用于遍历对象。

        for of不能遍历对象。

      c.for of可以用来遍历map集合

        for in不能遍历map集合  

五、const关键字

    const用户定义常量。(不能变)

    常量命名方式:

        为了与变量区别,一般用大写  

     const PI = 3.1415;

     PI = 3.14;

     alert(PI) //报错    

六、字符串模板

            解析字符串中的变量,使用`${ 变量名 }`

     字符串模板:` `;主要是为了减少字符串拼接时容易出现的拼接错误

    `jflwejelf${变量名}`;${}里面可以解析变量,也可以解析函数  

      例子:function fn(){

              return 34;

             }

             var s = `辕脸${fn()}辕人`;

             alert(s);//辕脸34辕人

七、箭头函数

       function box(){};

       var box = function(){};

       var box = () => {};

 

    1)凡是匿名函数都可以写在箭头函数

      例子:document.onclick=() => {

         alert("ok");

        }

    2)所有的方法中的回调函数都可以写成箭头函数。

      例子:var i=0;

           setInterval(() => {

            i++;

           console.log(i);

           },1000);

    3)所有赋值方式的函数都可以写成箭头函数。

       例子:var box = () =>{          相当于function box(){

            alert("hello箭头函数");          alert("hello箭头函数");

            }                               }   

            box();                          box();

    4)箭头函数中的this

          a.箭头函数没有this,箭头函数中的this继承父级而来。

          例子:var box=document.getElementById("box");

               box.onclick = function(){ 

               var fn = () => 因为是这行中没有封闭起来

                console.log(this);//指向父级box

                 }

                fn();

                 }

          b.箭头函数无法通过bind(),call(),apply()改变this的指向。

八、解构赋值

        作用:

        1.一次性可以定义多个变量

          var [a,b,c] = [34,23,43,6,5];

          console.log(a,b,c);//34,23,43

        2.可以快速的获取对象中对应属性的值,并且无视属性顺序

          var {age,userName} = {userName:"tom",age:20};

         console.log(userName,age);//tom 20

        3.可以轻松实现两个数的交换。

            var num1 = 67;

            var num2 = 89;

            var [num1,num2] = [num2,num1];

            console.log(num1,num2);//89 67

        4.在函数中的使用,一次性可以返回多个结果。

             function box(){

            return [43,65,76];

            }

            alert(box())//43,65,76

            var [a,b,c] = box();

            console.log(a,b,c)//43,65,76

var obj = {

        uname:"tom",

        age:32

    }

    function box({age,uname}){

    console.log(uname,age);

    }

    box(obj);//tom 32

解构赋值实现冒泡排序

function fn(arr){

        for (var i = 0; i < arr.length-1; i++) {

            for(var j=0;j<arr.length-1-i;j++){

                if(arr[j]>arr[j+1]){

                    [arr[j],arr[j+1]]=[arr[j+1],arr[j]];

                }

            }

        }

        return arr;

    }

    console.log(fn([12,43,2,54,34,23,65]));

九、Array.from();把伪数组转成真正的数组。

    1)伪数组:arguments,通过document.getElementsByTagName("li")等得到             的元素集合也是一个伪数组

    2)伪数组不能用数组的方法,可以用下标访问,但是通过Array.from()方法把伪数组转成真正的数组,就可以使用数组的方法了。

   例子:function box(){

        console.log(Array.from(arguments).sort(function(a,b){

            return a-b;

        }));

    }

    box(43,54,23,654,32);  

    3)把属性含有length的对象转成数组

     例子:var obj={

              "0":23,

               1:54,

               2:89,(要是这里写成3:89,则输出的是undefined)

               length:3

             }  (注意:键必须是从0开始,并且要有顺序,有无“”都可  以。

      Array.from(obj,function(item,index){

      console.log(item,typeof index)(回调函数相当于遍历)

   });

面试题 : 定义一个函数,功能实现 生成m个n的数组    要求: 不利用循环

    function fn(m,n){

        var newArr = Array.from({length:m},() => {

            return n;

        });

        return newArr;

    }

    console.log(fn(5,3));//3,3,3,3,3

十、set集合

   1)定义一个set集合:

    var set = new Set();

    set集合主要用来保存数据。

   2)set集合的特点:

       1.自动去重

         var set=new Set([23,"43",543,23,54,43]);

       console.log(set); //Set {23, "43", 543, 54, 43}

       2.不会进行自动类型转换

     传参:

     new Set( 23,43,23 );不能这样传

         new Set( [23,43,23] );要用[ ]的方式传参

          或者:

             var set = new Set()

          set.add( 23 ).set.add( 43 ).set.add( 23 )...

     例子:var set=new Set();

       set.add([23,12]).add(23).add({name:"tom"});

        console.log(set);//Set {[23, 12], 23, Object {name: "tom"}}

   3)set集合的属性

    set.size:获取set集合数据个数

     var set = new Set([23,"43",543,23,54,43]);

    alert(set.size);//5,不包括重复的

   4)set集合的方法

    1.add();向集合中添加一个值,一次只添加一个

    2.set.has();查找一个值在集合里是否存在,如果不存在返回false,      在返回true;

       var set = new Set([23,"43",543,23,54,43]);

       alert(set.has(23)); //true

       var set = new Set([23,"43",543,23,54,43]);

       alert(set.has(“23”));// false

    3.set.delete("43");删除集合中的某个值

       var set = new Set([23,"43",543,23,54,43]);

       set.delete("43");

       console.log(set);//Set {23, 543, 54, 43}  

    4.set.clear();清空集合中的所有数据。返回这个Set {}

   5)set集合的遍历

      var set = new Set([23,"43",543,23,54,43]);

    set.forEach(function(item,index,arr){

        console.log(item,index,arr)

    });//23,43(这是字符串),543,54,43

       

自动去重

var set=new Set([23,342,34,23]);

    var arr=Array.from(set);

    console.log(arr);//[23, 342, 34]

 

十一:map集合

         1.定义一个map集合

                  var map = new Map();

         2.传参

                      map .set("键",“值”).set("键",“值”).set("键",“值”);

                  map.set("name","tom").set("age",29);

         3.属性(跟set差不多)

                  map.size 获取map数据的个数

         4.方法

                   map.has("键");

                   map.delete("键");

                   map.clear();

                   map.get("键");

         5.遍历

                  for of遍历

                  for(var item of map){ console.log(item[0])}

                  for(var item of map){

                      console.log(item[0],item[1]);

                       }

                  item 得到的是数组,数组元素由键和值构成item[0]==键,item[1]==值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值