Advertisement

ES6课堂笔记

阅读量:

一.ES6的概念

ECMAScript 6(ES6):新增的JavaScript核心语法
于2015年正式推出
旨在提升开发效率和用户体验

二.let

var: 全局作用域、函数作用域、没有 if, switch, while, do 和 else 作用域,并且会导致变量提升

让关键字用于定义局部变量。
在每个作用域中都由一对花括号{}来限定。
不可以提升被声明过的变量。
不允许在同一作用域内重复声明同一个变量。

let应用领域:

复制代码
  //1.单击第一个li弹出 li的下标(局部作用域)

    
     //h1内容 1s 是9 2s是8 3s是7 ....10s是1
    
     //选择到h1
    
     for(let i = 9;i <= 1;i--){
    
         //延迟10-i秒执行
    
         setTimeout(function(){
    
             //设置文本值为1
    
             h1.innerText = i;
    
         },(10-i)*1000);
    
     }
复制代码
       var lis = document.querySelectorAll("ul li");

    
      //遍历选择的节点,添加单击事件
    
      for(let i = 0;i < lis.length;i++){
    
          lis[i].onclick = function(){
    
              alert(i)
    
          }
    
      }
    
     //for循环结束 i值为5 单击时候for循环早已结束

三.const

const: 常量

不需手动提示变量名称
对于赋值操作,
建议采用大写字母作为变量名
声明的变量需被初始化
类型不可更改

什么时候使用const:

1.当声明变量不允许修改的时候,是个常量的时候

2.当这个对大概率不会被改变(选择的DOM节点)

复制代码
  {

    
         //const PI = 3.1415926;
    
         //const PI
    
         //PI = 3.1415926; //x声明必须赋值
    
         //PI = 3.14 //x 值不能修改
    
         //console.log(PI);
    
         const LIST = ["I","Hate","You"];
    
         LIST.push("love");
    
         console.log(LIST);
    
     }

四.解构

数组:
例:

复制代码
    var[a,b,,c=20,...rest]=[1,2,3,4,5,6];

[] :解构符号,
:一位,
...rest 剩余,
c=10 默认参数(有顺序的)

复制代码
     //把数组,对象,解构为单独的变量

    
     //数组解构:...rest 剩余值;一位;b = 10 默认10
    
     // var arr = [1,2,3,4,5,6,7,8];
    
     // var [a,b,...rest] = arr;
    
     // console.log(a,b,rest);
    
     // var [a,,b,,c,,d,...rest] = arr;
    
     // a:1,b:3bc:5,d:7,[8]
    
     // console.log(a,b,c,d,rest);
    
     var[a,,,b = 10] = [1,2,3,4];
    
     console.log(a,b);

五.对象解构

对象:
例:

复制代码
    var{name,age,leg=20,...rest}=obj;

{} 符号,
没有顺序,
...rest 剩余

复制代码
  
    
     //和数组解构一致,{}
    
     //...rest剩余,没有顺序,leg=2
    
     //解构应用:
    
     function log(obj){
    
         Let {href,port,host,...rest} = obj;
    
         //var href = obj.href;
    
         //var host = obj.host;
    
         console.log(href,port,host,rest)
    
     }
    
     log(location);
    
     // var obj = {name:"mumu",age:"18",eye:2,leg:8};
    
     // var {age,name,eye,leg=2,...rest} = obj;
    
     // console.log(name,age,leg,rest);

六.字符串方法

遍历字符串

复制代码
     var str = '収叏叐叒叓叕叚叜叝叞叠𠮷'

    
      var str = 'yue𠮷 口';
    
      for(var i = 0;i < str.length;i++){
    
          console.log(str[i])
    
      }
    
      for(let s of str){
    
          console.log(s);
    
      }

es5的trim 方法移除空白,trimLeft,trimRight

复制代码
    var str = "  我爱我的祖国  ";

    
      console.log(str)
    
      console.log(str.trim())

es6 repeat

复制代码
    console.log("我爱你\n".repeat(1000))

查找是否包含 indexOf lastIndeOf 下标|-1 includes是否包含 true|false

复制代码
     var str = "台湾是中国的一个省份";

    
     alert(str.includes("福建"))

检测:startsWith 以xxx开头 endsWith以xxx结尾

复制代码
     var str = "我特别喜欢和你做朋友";

    
     alert(str.startsWith('你'))   false

填充:001 002 100 101 padStart(位数,填充字符串) padEnd()

复制代码
     var str = "1";

    
      console.log(str.padStart(3,"0"))
    
      console.log(str.padEnd(10,"0"))

字符串末班``定义字符串,用${} 定义js

可以随意换行,可以随意使用符号

复制代码
     var s = "花轿";

    
     var str= `那天,他坐上${s.length<3?'八抬大轿':'奔驰加长版'},'"微笑"'
    
     着就看不见了`;
    
     console.log(str);

数组

复制代码
     //1.includes 检查

    
     // let arr = [5,"喜欢","吃肉"];
    
     // alert(arr.includes(5))
    
     //2.fill填充
    
     var arr = [];
    
     //设置长度
    
     arr.length = 5;
    
     //填充数组
    
     arr = arr.fill("填充内容",0,5);
    
     //输出
    
     // console.log(arr);
    
     //3.去重
    
     var arr = [1,1,2,2,2,1,3,7,3,7];
    
     //使用set去重
    
     //定义一个不重复的列表
    
     var s = new Set(arr);
    
     //把set转换为数组
    
     var arr2 = Array.from(s);
    
     //输出
    
     console.log(arr2);
    
     //在数组里面展开一个set
    
     // var arr3 = [...new Set(arr)];
    
     // console.log(arr3);
    
     //filter 去重的原理:indexOf下标与当前下标对比
    
     // var arr2 = arr.filter(function(item,index){
    
     //     //return true 保留,return false 移除
    
     //     //indexOf 得到下标等于index当前下标 保留
    
     //     // return arr.indexOf(item) === index;
    
     //     if(arr.indexOf(item) == index){
    
     //         return true;
    
     //     }else{
    
     //         return false;
    
     //     }
    
     // })
    
     // console.log(arr2)
    
  
    
  
    
     var arr2 = arr.filter((item,index)=>arr.indexOf(item) == index)
    
     console.log(arr2);

七.箭头函数

复制代码
    // var fun = function(str){

    
     //     return "love" + str;
    
     // }
    
     // var fun1 = (str) => "love" + str;
    
     //1.箭头函数就是函数的简写形式
    
     //箭头左边是:参数
    
     //箭头右边是:返回值,也是函数要执行的代码
    
     // alert(fun1("毛主席"))
    
     //2.参数:1个或者多个 用()包裹
    
     // var fun = function(){
    
     //     alert("我爱ES6")
    
     // }
    
     // var fun2 = () => alert("我爱ES6")
    
     // var func = function(a,b){
    
     //     alert(a+b)
    
     // }
    
     // var fun2 = (a,b)=>alert(a+b);
    
     // fun2(4,5)
    
     //3.返回值
    
     //如果返回是一个对象,那么用括号包裹
    
     // var fun = function(){
    
         // return {name:"mumu",age:18};
    
     // }
    
     // var fun2 = () => ({name:"mumu",age:18});
    
     // console.log(fun2());
    
     //4.执行语句:如果执行有多行,返回语句要用return 执行语句要用{} 包裹
    
     // var fun = function(str){
    
     //     if(str.includes("111")){
    
     //         return "222"
    
     //     }else{
    
     //         return "333"
    
     //     }
    
     // }
    
     var fun2 = str =>{
    
         if(str.includes("111")){
    
             return "222"
    
         }else{
    
             return "333"
    
         }
    
     }
    
     alert(fun2('puting'))
    
  
    
     //5.箭头函数的this指向的是上一层作用域的this
    
     //6.箭头函数不能new 当构造函数

八.函数参数

复制代码
     //1.函数的默认参数

    
     function say(color='黑'){
    
     alert('没有你的世界是'+color+'色的')
    
     }
    
     // say();
    
     // say("五彩");
    
     //2.函数的扩展实参(调用)
    
     function metting(a1,a2,a3,a4){
    
     console.log(`今天来参加,学校校会的有,${a1},${a2},${a3}和${a4}同学`);
    
     }
    
     var arr = ["小丁","大段","陈龙","小小怪"];
    
     //在函数调用的时候吧数组传入拓展
    
     metting(...arr) //把arr数组拆分为单个参数传入
    
     // metting.apply(null,arr);
    
     
    
      //3.函数的不定参(定义的时候)
    
      function add(...list){//把所有的单个参数,接收为一个叫list的数组
    
     //把参数list列表累计相加弹出
    
     alert(list.reduce((a,b) => a+b))
    
     //arguments,关键字,指函数的参数列表,Array.from把类似数组的元素转换为数组
    
     // var re = Array.from(arguments).reduce((a,b)=>a+b);
    
     // alert(re);
    
      }
    
      add(15,20,30);

九.对象简写

复制代码
    // var age = 18;

    
     // var name = "mumu";
    
     // var obj = {name:name,age:age,say:function(){
    
     //     console.log(this.name + this.age)
    
     // }}
    
     // var obj2 = {name,age,say(){
    
     //     //如果对象的键名与值一致,可以省略,函数可以省略function关键字
    
     //     alert(this.name + this.age)
    
     // }}
    
     var num = 1;
    
     var name = "nick";
    
     //对象的键可以是动态拼接
    
     var obj = {[name+num]:"mumu",age:18,["houseA"]:"北京天安门"};
    
     console.log(obj);

十.类

复制代码
   //class 类就是function 构造函数的 语法糖(简写) 本质上还是函数 typeof class

    
     //box类:属性:生命力;颜色;dom节点;方法:dead() 死亡,被打 生命值-1
    
     class Box{
    
         //初始化实例(构造函数)
    
         constructor(life=1,x=0,y=0){
    
             //生命力
    
             this.life = life;
    
             //墙的x与y值
    
             this.x = x;
    
             this.y = y;
    
             //创建一个节点
    
             var dom = document.createElement("div");
    
             //插入节点
    
             document.body.appendChild(dom);
    
             //指定实例的dom
    
             this.dom = dom;
    
             //更新dom
    
             this.updateDom();
    
             //给dom添加点击事件
    
             this.dom.addEventListener(("click"),()=>{
    
                 //用的箭头函数,this指向的 上一层作用域this(Box实例)
    
                 //让生命值--
    
                 this.life --;
    
                 var score = document.querySelector(".score");
    
                 score.innerText = score.innerText*1+1;
    
                  //如果生命值小于等于0,让dom从页面中删除
    
                 if(this.life<=0){this.dom.remove();}
    
                 //更新dom;
    
                 this.updateDom();
    
             })
    
         }
    
         updateDom(){
    
             //根据生命值的不一样
    
             //赋值给他不同的颜色
    
             if(this.life < 3){
    
                 this.color = "#c83a0b";
    
             }else if(this.life <= 5){
    
                 this.color = "#791810";
    
             }else{
    
                 this.color = "#e3e3e3";
    
             }
    
             //修改dom的样式:宽;高;背景色;位置;左;顶
    
             this.dom.style.width = "100px";
    
             this.dom.style.height = "100px";
    
             this.dom.style.backgroundColor = this.color;
    
             this.dom.style.position = "absolute";
    
             this.dom.style.left = this.x+"px";
    
             this.dom.style.top = this.y+"px";
    
         }
    
     }
    
     //Box是类:b1,b2,b3类的实例
    
     var b1 = new Box();
    
     //当实例的时候会先执行constructor创建一个实例对象,也会执行updateDom更新dom
    
     var b2 = new Box(10,100,0);
    
     var b3 = new Box(4,200,0);
    
  
    
     //创建一个新的MBox 可以移动box,继承 Box
    
     //自动移动(从上掉下来)
    
     //继承Box
    
     class MBox extends Box{
    
         constructor(life = 1,x = 0,y = 0){
    
             //super调用父元素构造函数的方法
    
             super(life,x,y);
    
             //停止动画id
    
             this.id = null;
    
             //自动向下移动
    
             this.autoMoveDown();
    
         }
    
         autoMoveDown(){
    
             this.id = setInterval(()=>{
    
                 //更改y值
    
                 this.y+=2;
    
                 //更新dom(继承Box)
    
                 this.updateDom();
    
                 if(this.y > window.innerHeight){
    
                     //选择到分数
    
                     var score = document.querySelector(".score");
    
                     //如果触底减分
    
                     score.innerText = score.innerText-10;
    
                     //如果超过了窗口的高,移除
    
                     this.dom.remove();
    
                     //停止间隔调用
    
                     clearInterval(this.id);
    
                 }
    
             },16)
    
         }
    
     }
    
     //实例化MBox
    
     // var b4 = new MBox(4,300,0);
    
     // var b5 = new MBox(10,400,-200);
    
     //随机创造20个方块
    
     for(var i = 0;i < 10;i++){
    
         //随机生命 1-10
    
         var life = Math.ceil(Math.random()*5)
    
         //随机y 0--500;
    
         var y = Math.floor(Math.random()*-500)
    
         //实例化
    
         new MBox(life,i*80,y);
    
     }

全部评论 (0)

还没有任何评论哟~