let

let命令用来声明块级作用域. 以前的JavaScript只有全局作用域和函数作用域, 没有块级作用域.

  1. // 示例1:
  2. if (1) {
  3. var a = "hello";
  4. let b = "world";
  5. }
  6. console.log( a ); // hello
  7. console.log( b ); // b is not defined
  8. // 示例2:
  9. for (let i = 0; i < 10; i++) {
  10. // do something
  11. }
  12. console.log(i); // ReferenceError: i is not defined
  13. // 示例3.1:
  14. var a = [];
  15. for (var i = 0; i < 10; i++) {
  16. a[i] = function () {
  17. console.log(i);
  18. };
  19. }
  20. console.log( i );
  21. console.log( a[6]() ); // 10
  22. // 循环结束后i的值为10, a[6](), 相当于a[6](10), 所以输出10
  23. // 示例3.2:
  24. var a = [];
  25. for (let i = 0; i < 10; i++) {
  26. a[i] = function () {
  27. console.log(i);
  28. };
  29. }
  30. console.log( a[6]() ); // 6
  31. // 循环结束后, i不再能够被访问, 此时调用a[6](), 则相当于a[6](6), 输出6

不存在变量提升

  1. // var 的情况
  2. console.log(foo); // 输出undefined
  3. var foo = 2;
  4. // let 的情况
  5. console.log(bar); // 报错ReferenceError
  6. let bar = 2;
  7. // 什么都不定义而直接输出
  8. console.log(foo2); // 报错ReferenceError

报错与输出undefined大不一样, undefined是JavaScript里的值, 而报错则程序中断运行.

const

const声明一个只读的常量. 一旦声明, 常量的值就不能改变.

  1. const PI = 3.1415;
  2. PI // 3.1415
  3. // 为const变量重新赋值报错
  4. PI = 3; // TypeError: Assignment to constant variable.
  5. // 由const变量不能在其后赋值, 所以在声明的同时必须同时赋值, 否则报错
  6. const foo; // SyntaxError: Missing initializer in const declaration

const的变量作用域等其它特性都与let相同

箭头函数

ES6允许使用箭头(=>)定义函数. 一个箭头函数表达式的语法比一个函数表达式更短.

语法

首先箭头函数一般用来简化使用函数表达式来定义的函数, 总体理解就是箭头左边是函数的参数, 箭头

右边是函数的返回值或者函数体.

  1. var func1 = (param1, param2, paramN) => expression; // 相当于
  2. var func2 = function (param1, param2, paramN) { return expression };
  3. // 注意下面的statements加了大括号
  4. var func10 = (param1, param2, paramN) => { statements }; // 相当于
  5. var func11 = function (param1, param2, paramN) { statements };
  6. // Parentheses are optional when there's only one parameter name:
  7. // 函数参数只有1个, 则参数外层的括号可省略
  8. var func3 = (singleParam) => { statements }; // 相当于
  9. var func4 = singleParam => { statements } // 相当于
  10. var func5 = function (singleParam) { statements };
  11. // A function with no parameters should be written with a pair of parentheses.
  12. // 函数没有参数, 参数外层的括号不可省略
  13. var func6 = () => { statements }; // 相当于
  14. var func7 = function () { statements };
  15. // Parenthesize the body of function to return an object literal expression:
  16. // 函数的返回值是1个对象, 则需要额外加一层小括号(因为原来的大括号当包围函数体的用途)
  17. var func8 = params => ({name: sheng});
  18. var func9 = function (params) { return {name: sheng} };

强烈推荐这个网站http://babeljs.io/repl, 把自己写的箭头函数, 复制粘贴到该网站左边的框

里, 该网站就会自动帮你解析成ES3/5版本.

简单示例

  1. var sayHello = () => "hello-world";
  2. console.log( sayHello() );

Class

ES6标准的定义的class并不是推翻了已经存在JavaScript基于原型的继承方式, 新的class,

写法只是让我们看起来更清晰, 更像传统的面向对象编程.class, 实际上是1个特殊的函数.

  1. // 传统写法
  2. function Point(x, y) {
  3. this.x = x;
  4. this.y = y;
  5. }
  6. Point.prototype.toString = function () {
  7. return '(' + this.x + ', ' + this.y + ')';
  8. };
  9. var p = new Point(1, 2);
  10. // class写法
  11. //定义类
  12. class Point {
  13. constructor(x, y) {
  14. this.x = x;
  15. this.y = y;
  16. }
  17. toString() {
  18. return '(' + this.x + ', ' + this.y + ')';
  19. }
  20. }

模板字符串

模板字符串是增强版的字符串, 使用反引号标识. 提供嵌入表达式, 插入变量, 保留换行等功能.

语法

  1. `string text`
  2. `string text line 1
  3. string text line 2`
  4. `string text ${expression} string text` // ${} 是固定用法

用法

  1. // 在字符串中嵌入变量
  2. var name = "Bob", time = "today";
  3. `Hello ${name}, how are you ${time}?`
  4. // 多行字符串
  5. console.log(`
  6. string text line 1
  7. string text line 2
  8. string text line 3
  9. `);
  10. console.log("\
  11. string text line 1\
  12. string text line 2\
  13. string text line 3\
  14. ");
  15. //

相关链接

Babel REPL: http://babeljs.io/repl, 该工具非常强大, 在线把ES6语法解析成其兼容版本.

本文大部分内容都参考自此书: http://es6.ruanyifeng.com/

箭头函数 - MDN

ES6简单入门的更多相关文章

  1. koa2入门--01.ES6简单复习、koa2安装以及例子

    1.ES6简单复习 /*let 和 const: let用于定义一个块作用域的变量,const 定义一个常量 */ let a = 'test'; const b = 2; /*对象的属性和方法的简写 ...

  2. Vue的简单入门

    Vue的简单入门 一.什么是Vue? vue.js也一个渐进式JavaScript框架,可以独立完成前后端分离式web项目 渐进式:vue可以从小到控制页面中的一个变量后到页面中一块内容再到整个页面, ...

  3. python 全栈开发,Day88(csrf_exempt,ES6 快速入门,Vue)

    BBS项目内容回顾 1. 登陆页面 1. 验证码 1. PIL(Pillow) 2. io 2. ORM 1. 增删改查 3. AJAX $.ajax({ url: '', type: '', dat ...

  4. es6 快速入门 系列

    es6 快速入门(未完结,持续更新中...) 前言 为什么要学习es6 es6对于所有javaScript开发者来说,非常重要 未来,es6将构成javaScript应用程序的基础 es6中很多特性, ...

  5. es6 快速入门 系列 —— 变量声明:let和const

    其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...

  6. es6 快速入门 系列 —— promise

    其他章节请看: es6 快速入门 系列 Promise Promise 是一种异步编程的选择 初步认识Promise 用 Promise 来实现这样一个功能:发送一个 ajax,返回后输出 json ...

  7. es6快速入门 系列 - async

    其他章节请看: es6 快速入门 系列 async 前文我们已经知道 promise 是一种异步编程的选择.而 async 是一种用于执行异步任务更简单的语法. Tip:建议学完 Promise 在看 ...

  8. es6 快速入门 系列 —— 类 (class)

    其他章节请看: es6 快速入门 系列 类 类(class)是 javascript 新特性的一个重要组成部分,这一特性提供了一种更简洁的语法和更好的功能,可以让你通过一个安全.一致的方式来自定义对象 ...

  9. es6 快速入门 系列 —— 对象

    其他章节请看: es6 快速入门 系列 对象 试图解决的问题 写法繁杂 属性初始值需要重复写 function createPeople(name, age){ // name 和 age 都写了 2 ...

随机推荐

  1. ant.xml

    <?xml version="1.0"?> <project name="dxcc" default="buildplugins&q ...

  2. JAVA转化Unicode编码

    package yyl.example.basic.codec; import java.util.Locale; import java.util.regex.Matcher; import jav ...

  3. Jquery Deferred 详解

    近期由于公司项目主要由我来负责前端,所以打算优化一下代码.在jquery 里面有个Deferred的对象.为了研究这个也看了不少资料,其中阮一峰的博客写的很详细,这里转载一下. 一.什么是deferr ...

  4. IntelliJ IDEA常用快捷键小结

    IntelliJ Idea 常用快捷键列表 Ctrl+Alt+t 选择代码块 try catch Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Shift+N 查找文件Ctrl+Alt+ ...

  5. MapReduce实战(三)分区的实现

    需求: 在实战(一)的基础 上,实现自定义分组机制.例如根据手机号的不同,分成不同的省份,然后在不同的reduce上面跑,最后生成的结果分别存在不同的文件中. 对流量原始日志进行流量统计,将不同省份的 ...

  6. js控制button

    按钮变灰不可用方法:document.getElementById("crop").setAttribute("disabled", true); 按钮可用方法 ...

  7. Ajax.BeginForm提示不支持live属性或方法的错误

    解决: 在nuget下载最新版本的jquery.unobtrusive-ajax.min.js文件 Ajax异步请求: 引用JS: <script type="text/javascr ...

  8. JavaWeb——过滤器

    过滤器简介 WEB过滤器是一个服务器端的组件,它可以截取用户端的请求与相应信息,并对这些信息过滤. 过滤器的工作原理和生命周期 在没有Web过滤器的情况下,用户直接访问服务器上的Web资源.但是如果存 ...

  9. 【BZOJ】3296: [USACO2011 Open] Learning Languages(tarjan)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3296 显然,每群能交流的群是个强联通块 然后求出scc的数量,答案就是scc-1 #include ...

  10. html herf onclick

    html中a标签中的onclick和href的使用 onclick 链接的 onclick 事件被先执行,其次是 href 属性下的动作(页面跳转,或 javascript 伪链接): 假设链接中同时 ...