本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文连接,博客地址为 http://www.cnblogs.com/jasonnode/ 。该系列课程是汇智网 整理编写的,课程地址为 http://www.dwz.cn/3e6Yml

什么是ES6?


  ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。Mozilla公司将在这个标准的基础上,推出JavaScript 2.0。

  ECMAScript和JavaScript到底是什么关系?很多初学者会感到困惑,简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是ECMAScript的实现。

  1996年11月,JavaScript的创造者Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这种语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript。这个版本就是ECMAScript 1.0版。

  ES6的目标,是使得JavaScript语言可以用来编写大型的复杂的应用程序,成为企业级开发语言。

  作为新一代标准ES6将为我们带来很多令人欣喜的功能特性,本课程将着重带领大家领略ES6的风采,因此在学习本课程前需要具备JavaScript的基础知识,如果你并不了解JavaScript是什么,可以先学习一下JavaScript的入门课程。

支持


  虽说ES6已经作为新一代标准发布了,但是各大浏览器对新功能实现支持的还需要一段时间,那么我们怎么知道自己使用的浏览器是否支持ES6的相应功能呢?

  不用紧张,对ES6的支持可以查看kangax.github.io/es5-compat-table/es6/,在这里可以清晰的了解到不同版本的浏览器对ES6功能的支持情况。随着时间的推移,支持度已经越来越高了,ES6的大部分特性都实现了。

  如果你想现在就在浏览器使用ES6的特性,还可以通过引用兼容包的方式提前尝尝鲜。https://github.com/paulmillr/es6-shim

环境支持


直接插入网页

Traceur允许将ES6代码直接插入网页。首先,必须在网页头部加载Traceur库文件。

<!-- 加载Traceur编译器 -->
<script src="http://google.github.io/traceur-compiler/bin/traceur.js" type="text/javascript"></script>
<!-- 将Traceur编译器用于网页 -->
<script src="http://google.github.io/traceur-compiler/src/bootstrap.js" type="text/javascript"></script>
<!-- 打开实验选项,否则有些特性可能编译不成功 -->
<script>
  traceur.options.experimental = true;
</script> <script type="module">
  class Calc {
    constructor(){
      console.log('Calc constructor');
    }
    add(a, b){
      return a + b;
    }
  }   var c = new Calc();
  console.log(c.add(4,5));
</script>

注意,script标签的type属性的值是module(或者traceur),而不是text/javascript。这是Traceur编译器识别ES6代码的标识,编译器会自动将所有type=module的代码编译为ES5,然后再交给浏览器执行。

let


let是ES6中新增关键字。

它的作用类似于var,用来声明变量,但是所声明的变量,只在let命令所在的代码块内有效。

if(true){
var a = 1;
l et b = 2;
}
document.write(a);
document.write(b); // 报错:ReferenceError: b is not defined

体会下let和var的作用域范围:

function f1() {
var a = 8;
let n = 5;
if (true) {
let n = 10;
var a = 20
}
document.write(n); //
document.write(a); //
}
f1();

let应用


for循环的计数器,就很合适使用let命令。

var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
document.write(i);
};
}
document.write(a[6]());

const命令


const 声明的是常量,一旦声明,值将是不可变的。

const PI = 3.1415;
PI // 3.1415 PI = 3;
PI // 3.1415 const PI = 3.1;
PI // 3.1415

const 也具有块级作用域

if (true) {
const max = 5;
}
document.write(max); // ReferenceError 常量MAX在此处不可得

const 不能变量提升(必须先声明后使用)

if (true) {
document.write(MAX); // ReferenceError
const MAX = 5;
}

const 不可重复声明

var message = "Hello!";
let age = 25; // 以下两行都会报错
const message = "Goodbye!";
const age = 30;

const 指令指向变量所在的地址,所以对该变量进行属性设置是可行的(未改变变量地址),如果想完全不可变化(包括属性),那么可以使用冻结。

const C1 = {};
C1.a = 1;
document.write(C1.a); //
C1 = {}; // 报错 重新赋值,地址改变 //冻结对象,此时前面用不用const都是一个效果
const C2 = Object.freeze({});
C2.a = 1; //Error,对象不可扩展
document.write(C2.a);

是否包含字符串三种新方法


  传统上,JavaScript只有 indexOf 方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。

  • includes():返回布尔值,表示是否找到了参数字符串。
  • startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
  • endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
var str = "Hello world!";

str.startsWith("Hello") // true
str.endsWith("!") // true
str.includes("o") // true

这三个方法都支持第二个参数,表示开始搜索的位置。

var str = "Hello world!";

str.startsWith("world", 6) // true
str.endsWith("Hello", 5) // true
str.includes("Hello", 6) // false

上面代码表示,使用第二个参数n时,endsWith 的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。

repeat()原字符串重复


repeat()返回一个新字符串,表示将原字符串重复n次。

var str = "x";
str.repeat(3) // "xxx" var str1 = "hello";
str1.repeat(2) // "hellohello"

模板字符串


模板字符串提供了3个有意思的特性。

模板字符中,支持字符串插值:

let first = 'hubwiz';
let last = '汇智网';
document.write(`Hello ${first} ${last}!`);
// Hello hubwiz 汇智网!

模板字符串可以包含多行:

let multiLine = '
    This is
    a string
    with multiple
    lines';
document.write(multiLine);

标签模板


标签模板

var a = 5;
var b = 10; tag`Hello ${ a + b } world ${ a * b }`;

上面代码中,模板字符串前面有一个标识名tag,它是一个函数。整个表达式的返回值,就是tag函数处理模板字符串后的返回值。

tag函数所有参数的实际值如下。

  • 第一个参数:['Hello ', ' world ']
  • 第二个参数: 15
  • 第三个参数:50

也就是说,tag函数实际上以下面的形式调用。

tag(['Hello ', ' world '], 15, 50)

下面是tag函数的一种写法,以及运行结果。

var a = 5;
var b = 10; function tag(s, v1, v2) {
document.write(s[0]);
document.write(s[1]);
document.write(v1);
document.write(v2); return "OK";
} tag`Hello ${ a + b } world ${ a * b}`;
// "Hello "
// " world "
//
//
// "OK"

String.raw()


模板字符串可以是原始的:

ES6还为原生的String对象,提供了一个raw方法。

若使用String.raw 作为模板字符串的前缀,则模板字符串可以是原始(raw)的。反斜线也不再是特殊字符,\n 也不会被解释成换行符:

let raw = String.raw`Not a newline: \n`;
document.write(raw === 'Not a newline: \\n'); // true

ECMAScript 6教程 (一)的更多相关文章

  1. ECMAScript 6教程 (三) Class和Module(类和模块)

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文连接,博客地址为 http://www.cnblogs.com/jasonnode/ .该系列课程是 ...

  2. ECMAScript 6教程 (二) 对象和函数

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文连接,博客地址为 http://www.cnblogs.com/jasonnode/ .该系列课程是 ...

  3. ECMAScript新语法、特性总结

    前言 从2015年的ES6开始,JavaScript的语言标准每年都在更新,其中尤其以ES6的力度之大,到现在ES10已经发布,这里总结一下新语法. 参考:阮一峰 ECMAScript 6 教程 .E ...

  4. Vue.js + Webpack + ECMAScript 6 入门教程

    Vue.js学习教程 1.Vue.js——60分钟快速入门 2.Vue.js——60分钟组件快速入门(上篇) 3.Vue.js——60分钟组件快速入门(下篇) 4.Vue.js——基于$.ajax实现 ...

  5. ECMAScript 6.0基础入门教程

    ECMAScript 6.0基础入门教程 转:https://blog.csdn.net/hexinyu_1022/article/details/80778727 https://blog.csdn ...

  6. 《ECMAScript 6 入门教程 - 阮一峰著》学习笔记

    在刷LeetCode的过程中看到很多新的语法糖,系统学习一下以便代码更加规范,美观,健壮.

  7. Java 8 的 Nashorn 脚本引擎教程

    本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...

  8. SharePoint 2013 入门教程

    以下文章是自己在学习SharePoint的过程中,不断积累和总结的博文,现在总结一个目录,分享给大家.这个博客也是自己从SharePoint入门,到一个SharePoint开发的成长记录,里面记录的都 ...

  9. es6入门教程完整版

    ECMAScript 6入门 <ECMAScript 6入门>是一本开源的JavaScript语言教程,全面介绍ECMAScript 6新引入的语法特性. 作者:阮一峰 授权:署名-非商用 ...

随机推荐

  1. (转)深入理解flash重绘

    深入理解Flash Player重绘 Flash Player 会以SWF内容的帧频速度来刷新需要变化的内容,而这个刷新的过程,我们通常称为“重绘(redraw)”,相信即便是初级的菜鸟也知道,只要使 ...

  2. Android事件处理

    含义:为用户动作提供响应就是事件处理. Android提供了强大的事件处理机制:基于监听的事件处理.基于回调的事件处理. 一.基于监听的事件处理 监听的处理模型主要涉及三类对象 >Event S ...

  3. 已知树的前序、中序,求后序的c++实现&已知树的后序、中序,求前序的c++实现

    #include"iostream" using namespace std; int pre[30]; int in[30]; int post[30]; int indexOf ...

  4. Lua数据结构

    lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础,如:数组,记录,链表,队列等都可以用它来表示. 1.数组 在lua中,table的索引可以有很多种表示方式.如果用整数来表示t ...

  5. tomcat域名问题

    首先可以确认,tomcat支持以下的配置: 1.同一个tomcat配置多个端口来发布不同的应用,配置多个<Service>即可; 2.同一个tomcat可以配置多个虚拟主机,以指定不同的域 ...

  6. SpringMVC表单标签简介

    在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需 ...

  7. Excel报表开发

    读取Excel数据 /// <summary> /// 封装方法 /// </summary> /// <param name="path">& ...

  8. 20145337实验三实验报告——敏捷开发与XP实践

    20145337实验三实验报告--敏捷开发与XP实践 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 ** 实验步骤**### 敏捷开发与XP 软件工程包括下列领域:软件需求 ...

  9. ListView的深入学习

    ListView通常有两个职责: 将数据填充到布局 : 处理用户的点击选择操作 二.创建ListView需要3个元素 ListView的每一列的View View的数据或者图片 连接数据与ListVi ...

  10. IOS第八天(2:UITableViewController团购,点击底部,xib加载更多, 代理模式)

    ******* HMViewController.h #import "HMViewController.h" #import "HMTg.h" #import ...