关于ES6新增的东西

查询浏览器对ES6的支持情况https://kangax.github.io/compat-table/es6/

Chrome、MS Edge、Firefox、Safari、Node和其它很多环境都已经嵌入程序以支持 JavaScript ES6 的大部分功能。

一、变量和变量的作用域
ES5:
定义变量用 var=5;
使用var来定义变量会使变量泄露到其他的代码块,并且使用var来定义变量会产生预解析,即变量的声明提前了,但是变量的初始化并没有提前,如果想使用var来声明变量,一定要在函数的顶部声明;

ES6:
定义变量加入了 let const

1》使用let来定义变量
let 会将变量提升到块顶部(而非像ES5是函数顶部)。
但是在变量声明前引用变量会造成错误。
let 是块作用域的,不可以在声明前使用。
块开始到变量生的区域:temporal dead zone;

2》const
如果不希望变量的值在发生改变,使用const声明变量。

总结:使用let和const代替var,尽量使用const来定义变量,如果变量在后续代码中需要更改变化,则使用let来声明

二、封闭空间
ES5:
(function(参数){})(传参);
ES5中封闭空间避免了污染全局环境

ES6:
为了避免污染全局环境污染不必再使用封闭空间,在局部环境中使用let来定义变量就解决了所有问题

    {
        let  a=5;
    }
    alert(a);  //undefined

三、字符串和变量的拼接
1》单行字符串和变量的拼接
ES5:
字符串和变量的拼接:变量不加‘‘,字符串加‘‘,字符串和变量的拼接使用+

        eg:
        var name=jason;
        var age=18;
        alert(‘His name is‘+name+‘,He is‘+age);

ES6:
字符串和变量的拼接,在拼接的整个作用域内加‘‘,变量和字符串都不再加‘‘,变量使用${变量名};
eg:

        const name=jason;
        const age=18;
        alert(‘His name is ${name},He is ${age}‘);

2》多行字符串
在进行DOM操作的时候免不了需要进行多行字符串的操作
ES5:
eg:

            var oLi=‘<li>n‘+
                        <div>我是ES5</div>n‘+
                        ‘<p>这是我的拼接</p>n‘+
                    ‘</li>‘;

ES6:

        eg:
            const oLi=‘<li>
                         <div>我是ES6</div>
                         <p>这是我的拼接</p>
                       </li>‘

四、解构赋值
1》数组的操作
ES5:

            var arr=[1,2,3,4,5];
            var s=arr[0];
            var n=arr[4];
            alert(s,n);//1,5

ES6:

            const arr=[1,2,3,4,5];
            const [s,,,,n]=arr;
            alert(s,n);

2》值的对调:例如冒泡排序中的数组的值的对调
ES5:

            function BubbleSort(arr){
                for(var i=0;i<arr.length;i++){
                    for(var j=0;j<arr.length-1;j++){
                        if(arr[j]>arr[j+1]){
                            var tmp=arr[j];
                            arr[j]=arr[j+1];
                            arr[j+1]=tmp
                        }
                    }
                }
                return arr;
            }

ES6:

             function BubbleSort(arr){
                for(var i=0;i<arr.length;i++){
                    for(var j=0;j<arr.length-1;j++){
                        if(arr[j]>arr[j+1]){
                            [arr[j],arr[j+1]]=[arr[j+1],arr[j]];
                        }
                    }
                }
                return arr;
            }

3》查找返回值(包含多个值的时候);
ES5:

            function obj() {
              var left=1, right=2, top=3, bottom=4;
              return { left: left, right: right, top: top, bottom: bottom };
            }
            var data = obj();
            var left = data.left;
            var bottom = data.bottom;
            console.log(left, bottom); // 1 4

ES6:

            function obj(){
                const left=1, right=2, top=3, bottom=4;
                return    {left,right,top,bottom};
            }
            const {left,bottom}=obj();
            console.log(left, bottom); // 1 4

还有
ES5:

            function settings() {
              return { display: { color: ‘red‘ }, keyboard: { layout: ‘querty‘} };
            }
            var tmp = settings();
            var displayColor = tmp.display.color;
            var keyboardLayout = tmp.keyboard.layout;
            console.log(displayColor, keyboardLayout); // red querty

ES6:

            function settings() {
              return { display: { color: ‘red‘ }, keyboard: { layout: ‘querty‘} };
            }
            const { display: { color: displayColor }, keyboard: { layout: keyboardLayout }} = settings();
            console.log(displayColor, keyboardLayout); // red querty

五、类和面向对象
在 JavaScript 中,每个对象都有原型对象。所有 JavaScript 对象都从原型上继承方法和属性。
ES5中,属性放在构造函数(constructor)里,方法放在原型(prototype)上;
ES6中引入了类(class)来代替构造函数(constructor);
1》面向对象:ES6中引入了类(class)
ES5:

            function Person(name,age){
                this.name=name;
                this.age=age;
            }

            Person.prototype.showName=function(){
                return this.name;
            }

            var P1 = new Person(‘jason‘,‘18‘);
            alert(P1.showName());//jason

ES6:

            class Person {
              constructor(name) {
                this.name = name;
              }
              showName() {
                return this.name;
              }
            }
            const P1 = new Person(‘jason‘);
            alert(P1.showName()); //jason

2》继承:提供了新的关键字 extends 和 super
ES5:

            function Person (name,age){
                this.name = name;
                this.age = age;
            }
            Person.prototype.showName = function(){
                return this.name;
            };
            Person.prototype.showAge = function(){
                return this.age;
            };

            function Worker (name,age,job){
                //属性继承
                Person.call(this,name,age);
                //Person.apply(this,arguments);
                this.job = job;
            }
            //方法继承
            Worker.prototype = new Person();
            Worker.prototype.constructor = Worker;
            Worker.prototype.showJob = function(){
                return this.job;
            };
            //
            var w1 = new Worker(‘jason‘,18,‘要饭的‘);
            alert(w1.showJob());//要饭的

ES6:

            class Person {
                constructor(name,age) {
                  this.name = name;
                  this.age=age;
                }
                showName() {
                  return this.name;
                }
                showAge(){
                  return this.age;
                }
            }
            class Worker extends Person {
                  constructor(name,age,job){
                      super(name,age);
                      this.job=job;
                  }
                  showJob(){
                      return this.job;
                  }
            }
            const W1 = new Worker(‘jason‘,18,‘要饭的‘);
            alert(W1.showJob()); // 要饭的

转载请注明‘转载于Jason齐齐的博客http://www.cnblogs.com/jasonwang2y60/’

时间: 2024-10-21 09:39:32

关于ES6新增的东西的相关文章

关于ES6新增的东西(二)

六.原生Promise 就是一个对象,用来传递异步操作的数据(消息) pending(等待.处理中)-> Resolve(完成.fullFilled) -> Rejected(拒绝.失败) ES6: var p1=new Promise(function(resolve,reject){ //resolve 成功了 //reject 失败了 }); var p1=new Promise(function(resolve,reject){ if(异步处理成功了){ resolve(成功数据) }

es6新增的api

从值的转换到数学计算,ES6给各种内建原生类型和对象增加了许多静态属性和方法来辅助这些常见任务.另外,一些原生类型的实例通过各种新的原型方法获得了新的能力. 注意: 大多数这些特性都可以被忠实地填补.我们不会在这里深入这样的细节,但是关于兼容标准的shim/填补,你可以看一下"ES6 Shim"(https://github.com/paulmillr/es6-shim/). Array 在JS中被各种用户库扩展得最多的特性之一就是数组类型.ES6在数组上增加许多静态的和原型(实例)的

ES6新增—新增循环、箭头函数

5.新增循环: 以前for循环,for in循环 ES6新增循环: for of 循环:遍历(迭代,循环)整个对象,变现类似于for in 循环 两者的区别: for in循环:既可以循环数组,又可以循环json 循环数组:i代表数组的索引 var arr1=['apple','banana','appel','orange']; for(var i in arr1){ console.log(i); //0,1,2,3 } 循环json:name代表json的索引 var json=[a:'a

es6新增的数组方法和对象

es6新增的遍历数组的方法,后面都会用这个方法来遍历数组,或者对象,还有set,map let arr=[1,2,3,4,3,2,1,2]; 遍历数组最简洁直接的方法法 for (let value of arr) { console.log(value);//输出1,2,3,4,3,2,1,2 } 1. 数组.map() 返回一个新的数组,es5要复制一个新的数组我们一般用循环,现在直接用map let arr=[1,2,3,4,3,2,1,2]; let newArr=arr.map((va

ES6新增的 Set 和 WeakSet

什么是Set结构 Set是ES6给开发者带来的一种新的数据结构,你可以理解为值的集合.我们平时见到的数组Array也是一种数据结构,但是Set跟其他数据结构不同的地方就在于:它的值不会有重复项. 基本用法 我们从最基本的学起,Set的用法: 1 var s = new Set(); 2 console.log(s); 3 //打印结果:Set {} Set本身是一个构造函数,你可以理解为一个类,使用的时候需要用new来创建一个实例.以上的案例就是这样创建出一个Set结构,我们打印出来看看,控制台

ES6新增的math,Number方法

ES6新增的math,Number方法,下面总结了一些我觉得有用的 Nunber.isInteger()判断是否为整数,需要注意的是1,和1.0都会被认为是整数 console.log(Number.isInteger(1.0))//true console.log(Number.isInteger(1))//true console.log(Number.isInteger("1"))//false console.log(Number.isInteger("1.1&quo

ECMAScript简介以及es6新增语法

ECMAScript简介 ECMAScript与JavaScript的关系 ECMAScript是JavaScript语言的国际化标准,JavaScript是ECMAScript的实现.(前者是后者的规格,后者是前者的实现.但通常两者是可互换的.) ESMAScript的历史 1996年11月,Netscape公司将Js提交给国际化标准组织ECMA,当初该语言能够成为国际化标准. 1997年,ECMAScript 1.0版本推出.(在这年,ECMA发布262号标准文件(ECMA-262)的第一版

【ES6新增语法详述】 &#210864;

目录 1. 变量的定义 let const 2. 模版字符串 3. 数据解构 4. 函数扩展 设置默认值 箭头函数 5. 类的定义 class 6. 对象的单体模式 原文: http://blog.gqylpy.com/gqy/275 "@ ES6新增了关于变量的定义,函数扩展,数据结构,类,模块等概念,本文将详细介绍常用的ES6语法. *** 1. 变量的定义 let ES6中新增了let语法,用来声明变量,用法类似var. ==let定义的变量只在当前代码块内有效.== 如下示例: <

ES6 新增的一些特性

1. let关键字 (1)基本用法:let关键字用来声明变量,它的用法类似于var,都是用来声明变量. (2)块级作用域:let声明的变量,只在let关键字所在的代码块内有效. { var a = 10; let b = 10; } console.log(a); //10 console.log(b); //error: b is not defined var c = 10; { var c = 20; } console.log(c); //20 var d = 10; { let d =