基础变化

  1. String类型新增了三个方法,不必使用indexOf来判断一个字符串是否在另一个字符串内

    //String changes
    var a = "Hello world";
    var b = "Hello";
    var c = "world";
    function includes(source, dest) {
    return source.indexOf(dest) > -1;
    }
    function startsWith(source, dest) {
    return source.slice(0, dest.length) === dest;
    }
    function endsWith(source, dest) {
    return source.slice(source.length - dest.length, source.length) === dest;
    } var msg = "Hello world!"; console.log("msg startsWith Hello: ", msg.startsWith("Hello")); // true
    console.log("msg endsWith !: ", msg.endsWith("!")); // true
    console.log("msg includes o: ", msg.includes("o")); // true console.log("msg startsWith o: ", msg.startsWith("o")); // false
    console.log("msg endsWith world!: ", msg.endsWith("world!")); // true
    console.log("msg includes x: ", msg.includes("x")); // false
  2. Object.is方法用来判断两个参数是否相等,与全等(===)类似只是在+0和-0上以及NaN与NaN的判断上与全等不同
    console.log(+0 == -0);              // true
    console.log(+0 === -0); // true
    console.log(Object.is(+0, -0)); // false console.log(NaN == NaN); // false
    console.log(NaN === NaN); // false
    console.log(Object.is(NaN, NaN)); // true console.log(5 == 5); // true
    console.log(5 == "5"); // true
    console.log(5 === 5); // true
    console.log(5 === "5"); // false
    console.log(Object.is(5, 5)); // true
    console.log(Object.is(5, "5")); // false
  3. let声明,let与var的作用相同,只是以let声明的变量的作用域在当前的{}块内
    function getValue(condition) {
    
        if (condition) {
    let value = "blue"; // other code return value;
    } else { // value doesn't exist here return null;
    } // value doesn't exist here
    }
  4. const关键字用来声明常量,常量一旦赋值就无法改变,其他的赋值表达式都会被忽略
  5. 解构赋值,引入解构赋值可以方便的从复杂的对象中取得所需的属性值
    var options = {
    repeat: true,
    save: false,
    rules: {
    custom: 10,
    }
    }; // later var { repeat, save, rules: { custom }} = options; console.log(repeat); // true
    console.log(save); // false
    console.log(custom); //

  1. 类声明语法,目前许多前端框架比如dojo、extJs使用辅助设计使得Javascript看起来支持“类”,基于以上目的ES6引入类体系;目前在Chrome使用class关键字必须使用严格模式

    //class declaration
    function PersonType(name) {
    this.name = name;
    } PersonType.prototype.sayName = function() {
    console.log(this.name);
    }; let person = new PersonType("Nicholas");
    person.sayName(); // outputs "Nicholas" console.log(person instanceof PersonType); // true
    console.log(person instanceof Object); // true (function(){
    'use strict';
    class PersonClass {
    constructor(name) {
    this.name = name;
    }
    sayName() {
    console.log(this.name);
    }
    } let person = new PersonClass("Nicholas");
    person.sayName(); // outputs "Nicholas" console.log(person instanceof PersonClass);
    console.log(person instanceof Object);
    })()
  2. 属性访问器,通过使用get和set关键字来声明属性(Attribute),在ES5中需要借助Object.defineProperty来声明属性访问器
    //Accessor Properties
    (function(){
    'use strict';
    class PersonClass {
    constructor(name) {
    this.name = name;
    }
    get Name(){
    return this.name;
    }
    set Name(value){
    this.name = value;
    }
    } let person = new PersonClass("Nicholas");
    console.log('person.Name: ', person.Name) // outputs "Nicholas"
    })()
  3. 静态成员,ES5或者之前的代码通过在构造函数中直接定义属性来模拟静态成员;ES6则只需要在方法名前面加上static关键字
    //ES5
    function PersonType(name) {
    this.name = name;
    } // static method
    PersonType.create = function(name) {
    return new PersonType(name);
    }; // instance method
    PersonType.prototype.sayName = function() {
    console.log(this.name);
    }; var person = PersonType.create("Nicholas"); //ES6
    //Static Members
    (function(){
    'use strict';
    class PersonClass {
    constructor(name) {
    this.name = name;
    } sayName() {
    console.log(this.name);
    } static create(name) {
    return new PersonClass(name);
    }
    } let person = PersonClass.create("Nicholas");
    console.log(person);
    })()
  4. 继承,ES5中需要借助prototype属性而ES6中引入extends关键字来实现继承
    //Handling Inheritance
    (function(){
    'use strict';
    class PersonClass {
    constructor(name) {
    this.name = name;
    }
    } class Developer extends PersonClass {
    constructor(name, lang) {
    super(name);
    this.language = lang;
    }
    } var developer = new Developer('coder', 'Javascript');
    console.log("developer.name: ", developer.name);
    console.log("developer.language: ", developer.language);
    })()

模块机制

  当前关于JS的模块化已有两个重要的规范CommonJs和AMD,但毕竟不是原生的模块化,所以ES6中引入模块化机制,使用export和import来声明暴露的变量和引入需要使用的变量

  

Iterator和Generator

  Iterator拥有一个next方法,该方法返回一个对象,该对象拥有value属性代表此次next函数的值、done属性表示是否拥有继续拥有可返回的值;done为true时代表没有多余的值可以返回此时value为undefined;Generator函数使用特殊的声明方式,generator函数返回一个iterator对象,在generator函数内部的yield关键字声明了next方法的值

//Iterator & Generator
// generator
function *createIterator() {
yield 1;
yield 2;
yield 3;
} // generators are called like regular functions but return an iterator
var iterator = createIterator();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());

Promise

  ES6引入原生的Promise对象,Promise构造函数接受一个方法作为参数,该方法中可以调用resolve和reject方法,分别进入fulfill状态和fail状态

// Promise
var getJSON = function(url) {
var promise = new Promise(function(resolve, reject){
var client = new XMLHttpRequest();
client.open("GET", url);
client.onreadystatechange = handler;
client.send(); function handler() {
if (this.readyState !== 4) {
return;
}
if (this.status === 200) {
debugger;
resolve(this.responseText);
} else {
reject(new Error(this.statusText));
}
};
}); return promise;
}; getJSON("https://gis.lmi.is/arcgis/rest/services/GP_service/geocode_thjonusta_single/GeocodeServer?f=json").then(function(json) {
console.log('Contents: ' + json);
}, function(error) {
console.error('Error: ', error);
});

Proxy

  顾名思义用来作为一个对象或函数的代理。Proxy构造函数接受两个参数:target用来被封装的对象或函数、handler拥有一系列方法,重写这些方法以便当调用这些操作时会进入重写的方法中

•handler.getPrototypeOf
•handler.setPrototypeOf
•handler.isExtensible
•handler.preventExtensions
•handler.getOwnPropertyDescriptor
•handler.defineProperty
•handler.has
•handler.get
•handler.set
•handler.deleteProperty
•handler.enumerate
•handler.ownKeys
•handler.apply
•handler.construct

handler.getPrototypeOf
handler.setPrototypeOf
handler.isExtensible
handler.preventExtensions
handler.getOwnPropertyDescriptor
handler.defineProperty
handler.has
handler.get
handler.set
handler.deleteProperty
handler.enumerate
handler.ownKeys
handler.apply
handler.construct

参考资料:

Understanding ECMAScript 6

ECMAScript 6 入门

初探ECMAScript6的更多相关文章

  1. TypeScript初探

    TypeScript初探 TypeScript什么? 官方给的定义:TypeScript是一种由微软开发的自由和开源的编程语言,它是JavaScript类型的超集,可以编译成纯JavaScript,本 ...

  2. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  3. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  4. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  5. JavaScript学习(一) —— 环境搭建与JavaScript初探

    1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...

  6. .NET文件并发与RabbitMQ(初探RabbitMQ)

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...

  7. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

  8. 【手把手教你全文检索】Apache Lucene初探

    PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...

  9. Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

随机推荐

  1. System.Security.SecurityException The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception

    [15/08/19 00:03:10] [DataManager-7292-ERROR] System.Reflection.TargetInvocationException: Exception ...

  2. final、finally、finalize的区别

    看C#知识点的时候发现的问题 1.final 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为f ...

  3. 第3天作业 PoEdu MyString实现

    作业要求 代码: #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstring> class My ...

  4. 121. Best Time to Buy and Sell Stock (一) leetcode解题笔记

    121. Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of ...

  5. Windows XP发行12周年,我正步入中年,你已垂暮

    2001年10月25日,Windows XP正式全球上市!作为Windows 2000的升级版本,XP拥有大量新的功能:新的用户界面.防火墙整合等,这些都大大的增强了系统的易用性和安全性.而微软将于2 ...

  6. CodeForces 743B Chloe and the sequence (递归)

    题意:给定n和k,求第n个序列中第k个数是多少,序列是这样构造,原来只有1,然后再copy一遍放在到后面再在中间放上一个没有出现过的最小整数,就变成了 121,下次就成了1213121. 析:很明显是 ...

  7. 使用jigdo下载debian [windows环境下]

    使用jigdo下载debian  本文地址:http://www.cnblogs.com/yhLinux/p/4104451.html 准备工作: 下载jigdo:http://atterer.org ...

  8. java-7311练习(下)

    java练习,仅供参考! 欢迎同学们交流讨论. JDK 1.8 API帮助文档 JDK 1.6 API中文文档 第一次小组作业:模拟双色球彩票 第一次小组作业(一) 控制台版 游戏规则: • 双色球为 ...

  9. java-7311练习(上)

    java练习,仅供参考! 欢迎同学们交流讨论. JDK 1.8 API帮助文档 JDK 1.6 API中文文档 Java GUI -------------------------2016-10-23 ...

  10. VS2012中,C# 配置文件读取 + C#多个工程共享共有变量 + 整理using语句

    (一) C# 配置文件读取 C#工程可以自动生成配置文件,以便整个工程可以使用设置的配置进行后续的处理工作. 1. 首先,右键工程文件-->Properties -->settings-- ...