首页 > 其他分享 >开课吧前端1期.阶段4-2:es6的新特性

开课吧前端1期.阶段4-2:es6的新特性

时间:2023-10-17 17:13:28浏览次数:34  
标签:es6 arr resolve 前端 ajax alert json let 开课

es6介绍:

太有用了,后面会经常用到的都是ES6,不可能是ES5,ES4

ES6:是简称, 全称为: ECMAScript标准
ECMAScript 和 JavaScript 不是相同的一个东西
ECMAScript 是一个标准,JavaScript是语言一个实现
可以有很多语言去实现,但是目前只有JavaScript这一种实现了ECMAScript标准【中间倒闭了很多】

最新的标准:
ECMAScript6.0 【也叫做ECMAScript2015,一个东西】
简称:ECMA6 或者 ES6

 

ES6新特性:

ES6,带来几个新的东西:
不兼容——只有高级浏览器能用,但是目前还有IE7,IE8,难道要写2份代码【我们可以用ES6去写,然后靠编译解决IE7】


1.变量
  var——有3个不好:
  	1、重复定义不报错;
  			var a=12;
  			var a=5;
  			alert(a);
  	2、没有块级作用域;
  	3、不能限制修改 【java有final】

  let   变量,不能重复定义,有块级作用域
  const 常量,不能重复定义,有块级作用域 //{}花括号就是块作用域

 

 

 2、函数+参数

  箭头函数——简写:
   1.只有一个参数,()可以省
   2.只有一个语句,还是return,{}可以省

   参数扩展——剩余参数
   展开数组
   
//1.箭头函数 
<script>
    function(a,b,c){
      //代码
    }

    (a,b,c)=>{
      //代码
    }
</script>

//2.
<script>
    function show(fn){
      fn(12, 5);
    }

    show((a, b)=>{
      alert(a*b);
    });
  </script>

//3.只有一个参数,()可以省略
 <script>
    let showb=(a)=>{
      alert(a);
    };
     
    let show=a=>{
      alert(a);
    };

    show(12);
</script>

//4.只有一个语句,return可以不写
 <script>
    let suma=(a,b)=>{
        return a+b;
    }

    let sum=(a, b)=>a+b;

    alert(sum(12, 5));
 </script>

//5.对数据排序
<script>
    let arr=[12, 5, 88, 27, 16, 35, 8];

    //原来的写法
    arr.sort(function(a,b){
        return a-b;
    });

    //现在简写
    arr.sort((a, b)=>a-b);

    alert(arr);
</script>

//6.参数扩展
<script>
    function show(a, b,c, ...arg){
        alert(arg);
    }

    show(12, 5, 8, 31, 57, 26, 91);
</script>

//7.展开数组
 <script>
    let arr=[12, 5, 8];

    //...arr    =>    12, 5, 8

    function sum(a, b, c){
      alert(a+b+c);
    }

    sum(...arr);
</script>

//8.展开数组2
<script>
    let arr=[12, 5, 8];
    let arr2=[6, 43, 51];

    let res=[...arr, ...arr2];

    alert(res);
</script>

 

3.模块化

我们开发不可能所有语句都写在一起,需要模块化,比如用户找回密码,封装一个通用模块。以前可以用各种相关方法来帮我们完成,比如,request.js,现在ES6自带了模块系统,exports

4、数组

3.数组
  map       映射【一个对一个,原来是几个现在还是几个】     
  			[22, 56, 89, 67]  =>  [不及格, 不及格, 及格, 及格]

//对数字每个元素乘以2
<script>
    let arr=[12, 5, 8, 99, 27];

    let arr2=arr.map(function (item){
      return item*2;
    });
    //简写
    let arr2=arr.map(item=>item*2)

    alert(arr2);
</script>
  
  
reduce    汇总【算平均分,不管进去多少个,出来就一个】      
		   [..., ..., ...] => xx
//算平均分
<script>
    let arr=[12, 5, 8, 99, 27, 24, 30, 13];

    let result=arr.reduce((tmp, item, index)=>{
      if(index<arr.length-1){
        return tmp+item;
      }else{
        return (tmp+item)/arr.length; //最后一次算平均分
      }
    });

    alert(result);
</script>


filter    过滤【true留下,false不返回】      
	      [x, x, x, x, x, x] => [x, x, x...]

//返回是奇数的
<script>
    let arr=[12, 5, 8, 99, 27, 24, 30, 13];

    let arr2=arr.filter(item=>{
      if(item%2==0){
        return false;
      }else{
        return true;
      }
    });
    //简写
    let arr2=arr.filter(item=>item%2);

    alert(arr2);
 </script>


forEach    迭代、遍历【只是循环,其他啥也不干】  

//遍历数组元素
<script>
    let arr=[12, 5, 8, 99, 27, 24, 30, 13];

    arr.forEach((item, index)=>{
      //index下标 
      //alert('第'+index+'个是:'+item);
      alert(`第${index}个是${item}`); //可以用字符串模板`
    });
</script>

 

5、字符串

  正常字符串,单双引号:"xxx"   'xxx'   
  字符串模板,反单引号: `x${变量}xx` 
  字符串模板可以换行:
   			`abc
   			   def` 

  

6、ES6面向对象

多了3个东西: class、super、extends

//老版本的对象:
<script>
    function User(name, pass){
      this.name=name;
      this.pass=pass;
    }

    User.prototype.login=function (){
      alert('登陆成功');
    };
    
    //使用
    let u = new User('zhangsan','123456');
    u.login();
    
    
    
    //ES6
    class User{
      constructor(name, pass){
        this.name=name;
        this.pass=pass;
      }

      login(){ //类里面的方法无需function
        alert('成功');
      }
    }

</script> 
//继承extends ,扩展的意思,从谁那扩展而来的
class VIPUser extends User{
	constructor(name,pass,level){
	   super(name,pass);//代表父类的构造函数
	   
	}
	
	download(){
	   alert('开始下载')
	}
}

let v = new VIPUser('lisi','666666');
v.dowload(); //子类有的
v.login();  //父类也有

alert(v instanceof VIPUser); //true, v是User的一个实例

  

7、Promise  

promise(承诺)       解决异步操作
  同步:只有操作完事了,才往下执行              【一次只能做一个事儿】
  异步:这个操作进行中,其他操作也能开始         【一次可以做多个事儿】

  异步的优势:
  	1.用户体验好
  	2.高效

  同步的优势:
  	简单



异步:
  $.ajax({
    url: '/get_banners',
    type: 'post',
    dataType: 'json',
    success(){
      //加载第2个
      $.ajax({
        url: '/get_hot',
        type: 'post',
        dataType: 'json',
        success(){
          //第3次加载
          $.ajax({
            url: '/get_list',
            type: 'post',
            dataType: 'json',
            success(){
            //第4次加载
              $.ajax({
                url: '/get_hot',
                type: 'post',
                dataType: 'json',
                success(){

                },
                error(){
                  alert('读取失败');
                }
              })
            },
            error(){
              alert('读取失败');
            }
          })
        },
        error(){
          alert('读取失败');
        }
      })
    },
    error(){
      alert('读取失败');
    }
  })


  同步:
  let banners=$.ajax('/get_banners');
  let hot=$.ajax('/get_hot');
  let list=$.ajax('/get_list');
  let hot=$.ajax('/get_hot');
//Promise:中文承诺,可以状态机,成功就是成功了,不可改变。
//promise作用:就是异步操作,弄成同步的写法

//创建Promise对象
  let p=new Promise(function (resolve, reject){
        //resolve: 解决=sucess
        //reject:  拒绝=err
        $.ajax({
           url:'data/1.json',
           dataType:'json',
           sucess(arr){//成功了
       		  resolve(); //当成功了调用resolve,把结果传进去
           },
           error(err){
               reject(err);
           }
        })

  });

  //怎么用,then就是然后意思,然后有2分函数,其实就是resolve,reject
  p.then(()=>{}, ()=>{});
  p.then((resolve)=>{
  	 alert('成功了:'+resolve)
  }, (reject)=>{
   alert('失败:'+reject)
  });
//promise all

  let p1=new Promise(function (resolve, reject){
        //resolve: 解决=sucess
        //reject:  拒绝=err
        $.ajax({
           url:'data/1.json',
           dataType:'json',
           sucess(arr){//成功了
       		  resolve(); //当成功了调用resolve,把结果传进去
           },
           error(err){
               reject(err);
           }
        })

  });
  
  
    let p2=new Promise(function (resolve, reject){
        //resolve: 解决=sucess
        //reject:  拒绝=err
        $.ajax({
           url:'data/2.json',
           dataType:'json',
           sucess(arr){//成功了
       		  resolve(); //当成功了调用resolve,把结果传进去
           },
           error(err){
               reject(err);
           }
        })

  });
  
  
    let p3=new Promise(function (resolve, reject){
        //resolve: 解决=sucess
        //reject:  拒绝=err
        $.ajax({
           url:'data/3.json',
           dataType:'json',
           sucess(arr){//成功了
       		  resolve(); //当成功了调用resolve,把结果传进去
           },
           error(err){
               reject(err);
           }
        })

  });

//接收数组,意思是p1,p2,p3都完成后,我才会返回then,中间有一个失败返回错误
Promise.all([p1,p2,p3]).then(
          arr=>{console.log(arr)},  //因为有3个,所以接收到也是数组
          err=>{ console.log('错了')}
)
//jquery的ajax本身就是个Promise
<script>
    Promise.all([
      $.ajax({url: 'data/1.txt', dataType: 'json'}),
      $.ajax({url: 'data/2.txt', dataType: 'json'}),
      $.ajax({url: 'data/3.txt', dataType: 'json'}),
    ]).then(arr=>{
      let [a1, json, a2]=arr;

      alert(a1);
      alert(a2);
      console.log(json);
    }, err=>{
      alert('失败');
    });
</script>

注意,Promise如果单用不是特别好用,真正要用得特别全还是需要搭配generator,而且generator也不能单用,想把它用全了,async / await特别方便  

 

总结:

1.Markdown——个人介绍

2.开源许可证: 【Apache v2 License,MIT License】 什么意思?
	https://gitee.com/oschina/git-osc/wikis/pages/preview?sort_id=77&doc_id=10526
	
3.codewars的地址(专门做题的网站,每周10道题)
https://www.codewars.com/users/dancingblue

4.注册github账号
https://github.com/dancingblue
5.研究“如何用babel编译ES6”

------------------------------------------------------------------------------
下周内容:
	ES6&7,babel
	模块化 
 下周讲完,算是基础都有了,开窍了。 	

  

  

  

  

  

  

  

 

标签:es6,arr,resolve,前端,ajax,alert,json,let,开课
From: https://www.cnblogs.com/codelives/p/17762277.html

相关文章

  • 2前端开发css
    form表单'''获取前端用户数据并发送给后端服务器'''<fromaction=""></from>#需要再form标签内部编写获取用户数据标签#1属性action控制数据的提交地址方式1:写全路径action="http://www.aa7a.cn/user.php"方式2:写后缀(自动补全IP和PORT)......
  • ES6 module模块
    概述ES6中的module指的是JavaScript模块化规范中的一种。它通过export和import语法来导出和导入模块中的变量、函数、类等内容。使用ES6模块化的好处包括:解决了模块化的问题。消除了全局变量。管理加载顺序。使用在ES6模块中,一个文件代表一个模块当使用script标签加载模块时,需要......
  • 彻底搞懂:防止表单重复提交,前端限制还是后端限制?
    欢迎大家来到小米的技术分享专栏!今天我将为大家带来一个热门话题:如何有效地防止表单重复提交。在开发中,我们常常会遇到这样的问题:用户频繁点击提交按钮,导致数据重复提交,给系统和用户体验带来不必要的困扰。那么,在前端还是后端进行限制措施,哪个更好呢?让我们一起深入探讨。前端限制:防......
  • 前端模块化专题
    Commonjs(同步模块加载,运行时加载)exports和moudle.exports的区别?exports是module中exports对象的引用。当模块中使用了moudle.export={}的时候,所有exports都会失效。exports只能exports.a=a;这样使用,不能exports={};这种使用方式无效。每个模块其实都相......
  • es6
    let和var的区别变量声明提升暂时性死区不允许重复声明块级作用域(函数作用域,全局作用域-用函数作用域(匿名立即执行函数表达式)代替块级作用域)不与全局对象挂钩(window,global,self,globalThis)变量的结构赋值(数组,对象-原型链上也可-包装类型也可)用途交......
  • 前端url的几种实用情况
    一相对地址转绝对地址使用场景:某个函数需要在使用的时候传递一个地址,函数内部会利用这个地址进行某些操作(比如生成worker,生成image,数据转化等)如下:如果直接使用相对位置,会根据url进行拼接。但当一些利用利用了router的单页项目,页面的url并不能获取到真实的file地址。所......
  • 前端二进制流
    FileReader----读取file/blob数据FileReader.readAsArrayBuffer()异步方法,读取完成result属性中保存的将是被读取文件的ArrayBuffer数据对象。FileReader.readAsDataURL():一旦完成,result属性中将包含一个data:URL格式的Base64字符串以表示所读取文件的内容......
  • 前端调试时不改代码但又想打印变量信息怎么办?
    我们都知道,Chrome的控制台可以在调试的时候打断点。程序运行到这的时候会停止但有时候我们不希望程序断点执行,我们只是想看一些变量的信息。按照以前的方式,我们只能去修改源码增加打印日志的语句,这样既浪费时间,又需要在调试完成后清理掉我们打印的日志代码。其实,Chrome浏览......
  • 记录--Vue中前端导出word文件
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助很多时候在工作中会碰到完全由前端导出word文件的需求,因此特地记录一下比较常用的几种方式。一、提供一个word模板该方法提供一个word模板文件,数据通过参数替换的方式传入word文件中,灵活性较差,适用于简单的文件导......
  • 行行AI公开课:如何用AI工具做好跨境电商
    想要出海卖货!没经验的小白卖家如何快速突围?最近,以ChatGPT为代表的大模型产品的突破性进展,燃起了全行业对于AI技术的应用热情,出海行业也不例外。我们已经看到在跨境电商领域,从公司到个人都积极拥抱和探索AI工具的落地使用,更进阶的技术与应用也在不断涌现。那我们在跨境电子......