ES6 新特性

ES6新特性

1.变量

  (1).var 的问题:可以重复声明;  无法限制修改;  没有块级作用域;

  (2).新加let: 不能重复声明;  变量—可以重新进行赋值;  块级作用域;

  (3).新加const:不能重复声明;  常量—不可以重新进行赋值;  块级作用域;

        //var a=1;
        //var a=2;
        //alert(a); //可以重复声明

        //let a=1;
        //let a=2;
        //alert(a);//不可以重复声明

        const a=1;
        const a=2;
        alert(a);//和let一样

块级作用域有什么用?

    <script>
         window.onload=function(){
             var aBtn=document.getElementsByTagName("input");
             for (var i=0;i<aBtn.length;i++)
             {
                 aBtn[i].onclick=function()
                 {
                     alert(i);
                 }
             }
         }
    </script>

    <input type="button" value="按钮1">
    <input type="button" value="按钮2">
    <input type="button" value="按钮3">
    //都会弹出3

以前解决的办法:用密封空间

        <script>
             window.onload=function(){
                 var aBtn=document.getElementsByTagName("input");

                 for (var i=0;i<aBtn.length;i++)
                 {
                     (function(i){  //封密空间
                         aBtn[i].onclick=function()
                     {
                         alert(i);
                     };
                     })(i);
                 }
             }
        </script>   
       // 用一个封密空间,利用函数加了一级作用域。var 只认函数这一层。

现在:直接改成let即可

        <script>
             window.onload=function(){
                 var aBtn=document.getElementsByTagName("input");
                 for (let i=0;i<aBtn.length;i++)  //本身就是一层作用域
                 {
                     aBtn[i].onclick=function()
                     {
                         alert(i);
                     };
                 }
             }
        </script>
        <input type="button" value="按钮1">
        <input type="button" value="按钮2">
        <input type="button" value="按钮3">
     //把var 改成 let 即可,for循环就是一个语法块。

总结:let 完全可以取代const

2.函数

(1)箭头函数

      window.onload=function()
      {
         alert("abc")
      }

       window.onload=()=>{
          alert("abc")
       }

  箭头函数还有有两个特性:

  • 如果只有一个参数,“()”小括号可以省;
  • 如果只有一个return, “ { } ”花括号可以省;
    /*let show=function(a){
        return a*2;
    }*/
    //可以简写成
    let show=a=> a*2;
    alert(show(12))

(2)函数的参数

  • 参数扩展/展开;
    1.收集剩余参数,  形式:三个点,一个任意名字 ...args

    function show(a,b,...args){
         alert(a);
         alert(b);
         alert(args);
     }
     show(1,2,3,4,5,6)
    
    //1
    //2
    //3,4,5,6

    注意 ...args 必须放在最后一个

    2.展开数组:展开后的效果,相当于直接数组的内容写在这儿。

    let arr1=[1,2,3];
    let arr2=[5,6,8];
    let arr=[...arr1,...arr2];
    //  let arr=[1,2,3,5,6,8];   相当于这么写
    
    alert(arr);
    
    //1,2,3,4,5,6,7,8
  • 默认参数; ——传了听你的,不传听我的

    function show(a,b=88,c=99){
       console.log(a,b,c)
    }
    
     show(1,2)
    
    // 1,2,99

3.变量解构赋值

  • 左右两边结构必须一样;
  • 右边必须是个内容;
  • 声明和赋值不能分开;
    //数组:
    /*let arr=[1,2,3];
     let a=arr[0];
     let b=arr[1];
     let c=arr[2];*/
    
    //可以写成这样
     let [a,b,c] = [1,2,3]
    
     console.log(a,b,c);   //1,2,3
    --------------------------------------------------------------------------------------
    //json
    
    let {a,b,c} = {a:1,b:2,c:4}
    console.log(a,b,c);  //1,2,3

     

4.数组

  添加了四个方法:map  reduce  filter  forEach

  map — 映射  —  一个对一个

let arr=[10,2,3];
let result=arr.map(function(item){
    //alert(item)
    return (item*2)
})
alert(result)    // 20,4,6

//可以写成箭头函数
let arr=[10,2,3];
let result=arr.map(item=>item*2);
alert(result)    // 20,4,6

--------------------------------------------------------------------------------------

//在写一个应用
let score=[90,40,58,60];
let result=score.map(item=>item>=60?"及格":"不及格");
alert(result)  //及格,不及格,不及格,及格

  reduce  — 汇总   — 一堆出来一个

 // 总和
var arr=[88,12,20];

let result=arr.reduce(function(tmp,item,index){
  //alert(tmp+‘,‘+item+","+index) 三个参数分别代表:中间结果、每次的数、下标
    return tmp+item;
})
alert(result)  // 120

//求平均数
let result =arr.reduce(function(tmp,item,index){
  if(index!=arr.length-1)  //不是最后一次
  {
    return tmp+item;   //先求和
  }
  else
  {
    return (tmp+item)/arr.length;   //去求平均数
  }
})
alert(result) // 40

  filter —  过滤器

//求能被三整除的
let arr=[88,12,20,11];
let result=arr.filter(item=>item%3==0)
alert(result)  //12

  forEach  —  循环(迭代)

let arr=[12,10,44];
arr.forEach((item,index)=>
{
    alert(index+":"+item)
});  

// 0:12   // 1:10  // 2:44

5.字符串

  • 添加了两个新方法 :startsWith 起始,endsWith 结尾

    //startsWith let str="http://www.baidu.com";
    if(str.startsWith("http://")){
        alert("普通网址")
    }
    else if(str.startsWith("https://"))
    {
        alert("保密网址")
    }
    else
    {
        alert("其他网址")
    }
    //普通网址
    //endsWith let str="xxx.png";
    if(str.endsWith("txt"))
    {
        alert("文本文件");
    }
    else if(str.endsWith("png"))
    {
        alert("图片文件");
    }
    else
    {
        alert("其他");
    }
    //图片文件
  • 字符串模板:字符串连接
    1.可以把东西塞到字符串里 ${ }
    2.可以换行

    let title="标题";
    let content="内容";
    
    let str=`<div>
    <h1>${title}</h1>
    <p>${content}</p>
    </div>`;
    alert(str);
    
    //结果:
    <div>
    <h1>标题</h1>
    <p>内容</p>
    </div>

6.面向对象

之前的缺点:构造函数和类不区分

主要变化:1.class关键字,构造器(constructor) 和类分开了;

     2.class 里直接加方法。

//之前的
function User(name,pass)
{
    this.name=name;
    this.pass=pass;
};
User.prototype.showName=function(){
    alert(this.name);
};
User.prototype.showPass=function(){
    alert(this.pass);
};
var Obj=new User("wy","123");
Obj.showName();
Obj.showPass();
// 结果 wy 123

//ES6
class User{
    constructor(name,pass){   //constructor 构造器
        this.name=name;
        this.pass=pass;
    }

    showName(){
        alert(this.name)
    }
    showPass(){
        alert(this.pass)
    }
}
var Obj=new User("wy","123");
Obj.showName();
Obj.showPass();
// 结果 wy 123

 继承:

  extends:扩展,延展

  super:超类,父类

// 之前的继承写法
function User(name,pass)
{
    this.name=name;
    this.pass=pass;
}

User.prototype.ShowName=function(){
    alert(this.name);
}

User.prototype.ShowPass=function(){
    alert(this.pass);
}

function VipUser(name,pass,level)
{
    User.call(this,name,pass);
    this.level=level;
}

VipUser.prototype=new User();
VipUser.prototype.constructor=VipUser;

/*for(var i in User.prototype)
{
    VipUser.prototype[i]=User.prototype[i];
}*/

VipUser.prototype.ShowLevel=function(){
    alert(this.level)
}

var obj=new VipUser("wy","123","3");
obj.ShowName();

obj.ShowPass();

obj.ShowLevel();
// wy
// 123
// 3
---------------------------------------------------------------------------------------------------------------

//ES6
class User{
    constructor(name,pass){
        this.name=name;
        this.pass=pass;
    }
    showName(){
        alert(this.name)
    }
    showPass(){
        alert(this.pass)
    }
}

class VipUser extends User{     //用extends
    constructor(name,pass,level){
        super(name,pass);   //用 super 从父类上继承属性

        this.level=level;
    }

    showlevel(){
        alert(this.level);
    }
}

var Obj=new VipUser("wy","123","3");
Obj.showName();
Obj.showPass();
Obj.showlevel();
// wy
// 123
//3

7.json

8.promise

9.generator

  

原文地址:https://www.cnblogs.com/sun927/p/9429909.html

时间: 2024-11-06 07:15:39

ES6 新特性的相关文章

ES6新特性

ES6新特性概览 箭头操作符 如果你会C#或者Java,你肯定知道lambda表达式,ES6中新增的箭头操作符=>便有异曲同工之妙.它简化了函数的书写.操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs. 我们知道在JS中回调是经常的事,而一般回调又以匿名函数的形式出现,每次都需要写一个function,甚是繁琐.当引入箭头操作符后可以方便地写回调了.请看下面的例子. var array = [1, 2, 3]; //传统写法 array.forEach(f

ES6新特性(函数默认参数,箭头函数)

ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式:   从上面的代码可以看出存在一个问题,当传入的参数为0或者false时,会直接取到后面的值,而不是传入的这个参数值. 那怎么解决呢?对于上图的代码,可以通过判断是否传入了num参数,没有就用默认值:   这种做法还是很麻烦的,而ES6则直接在参数定义里面设置函数参数的默认值,而且不用担心传入参数是0或者false会出错了: 2.箭头函数 箭头函数用 =>

ES6新特性:Proxy代理器

ES6新特性:Proxy: 要使用的话, 直接在浏览器中执行即可, node和babel目前还没有Proxy的polyfill;,要使用的话,直接在浏览器中运行就好了, 浏览器的兼容性为:chrome>39或者firefox>18: Proxy的基本使用: Proxy如其名, 它的作用是在对象和和对象的属性值之间设置一个代理,获取该对象的值或者设置该对象的值, 以及实例化等等多种操作, 都会被拦截住, 经过这一层我们可以统一处理,我们可以认为它就是“代理器” ; Proxy是一个构造函数, 使

ES6新特性学习

ES6是ECMAScript 6的缩写简称,2015 年 6 月,ECMAScript 6 正式通过,成为国际标准.ES6带来的新功能涵盖面很广,还有很多很便利的功能.下面来记一下我接触到的几个新特性. 1.模板字符串,用反单引号包起来,可以实现字符串回车换行,也可以在字符串里拼接变量,${变量},很方便使用. var name="fanfan"; var age="20"; console.log("Hello,My name is "+nam

你不知道的JavaScript--Item24 ES6新特性概览

ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本了).上一次标准的制订还是2009年出台的ES5.目前ES6的标准化工作正在进行中,预计会在14年12月份放出正式敲定的版本.但大部分标准已经就绪,且各浏览器对ES6的支持也正在实现中.要查看ES6的支持情况请点此. 目前想要

JS篇 ES6新特性

注意: 1. Node环境下,--harmony参数启用ES6新特性,许多新特性只有在strict mode下才生效,因此使用"use strict"或者--use_strict,否则harmony没有被启用: 1. 块级作用域(Block scope) // Block scope function f1(){ console.log("Outside."); } (function(){ if(false){ // f1定义在if {}之内 function f

ES6新特性之模板字符串

ES6新特性概览  http://www.cnblogs.com/Wayou/p/es6_new_features.html 深入浅出ES6(四):模板字符串   http://www.infoq.com/cn/articles/es6-in-depth-template-string

ES6新特性概览

转自:http://www.cnblogs.com/Wayou/p/es6_new_features.html ES6学习可参考:http://es6.ruanyifeng.com/ 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本了).上一次标准的制订还是2009年出台的ES5.目前ES6

JavaScript学习--Item24 ES6新特性概览

ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本了).上一次标准的制订还是2009年出台的ES5.目前ES6的标准化工作正在进行中,预计会在14年12月份放出正式敲定的版本.但大部分标准已经就绪,且各浏览器对ES6的支持也正在实现中.要查看ES6的支持情况请点此. 目前想要

34.JS 开发者必须知道的十个 ES6 新特性

JS 开发者必须知道的十个 ES6 新特性 这是为忙碌的开发者准备的ES6中最棒的十个特性(无特定顺序): 默认参数 模版表达式 多行字符串 拆包表达式 改进的对象表达式 箭头函数 =&> Promise 块级作用域的let和const 类 模块化 注意:这个列表十分主观并且带有偏见,其他未上榜的特性并不是因为没有作用,我这么做只是单纯的希望将这份列表中的项目保持在十个. 首先,一个简单的JavaScript时间线,不了解历史的人也无法创造历史. 1995年:JavaScript以LiveS