PhoneGap中文网

 找回密码
 立即注册
查看: 17720|回复: 0
打印 上一主题 下一主题

Node.js 4.0的ES6新特性。

[复制链接]

10

主题

13

帖子

97

积分

注册会员

Rank: 2

积分
97
跳转到指定楼层
楼主
发表于 2015-11-2 17:47:51 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 小小智 于 2015-11-2 17:53 编辑

简介
  Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。这个版本是Node和iojs合并后发布的首个稳定版本,并且为开发者带来了大量的ES6语言扩展。
  Node.js 4.0.0 可以让您享受最尖端的技术,保持项目的先进性。其中对 v8 的升级几乎做到了与 Chromium / Google Chrome 同步,达到了 4.5.x,它提供了很多新的语言功能。ECMA-262 是 JavaScript 语言规范的最新版本,而且好多新特性数都是开箱即用的。这些新特性包括:
  • classes - 各种 ‘类’,再也无需用 CoffeeScript 的语法糖写类了
  • generators - 未来的.js 代码中将有无数生成器,不学一点就看不懂 JS 代码了哦
  • collections - 集合、映射、弱集合、弱映射
  • arrow functions - 箭向函数
  • block scoping - 使用 let 、const 作用域,块辖域
  • template strings - 模板字串
  • promises - 用标准化了的方法进行延迟和异步计算
  • symbols - 唯一的、不可修改的数据
严格模式
  严格模式在语义上与正常的JavaScript有一些不同。 首先,严格模式会将JavaScript陷阱直接变成明显的错误。其次,严格模式修正了一些引擎难以优化的错误:同样的代码有些时候严格模式会比非严格模式下更快。 第三,严格模式禁用了一些有可能在未来版本中定义的语法。
  因为我们ECMAScript 6中的一些特性,必须在严格模式下,才可以使用,而不报错。
严格模式可以应用到整个script标签或某个别函数中。
为整个script标签开启严格模式, 需要在所有语句之前放一个特定语句 "use strict"; (或 'use strict';)
  1. // 整个语句都开启严格模式的语法
  2.   "use strict";
  3.    let v = "Hi!  I'm a strict mode script!";
复制代码
同样的,要给某个函数开启严格模式,得把 "use strict"; (或 'use strict'; )声明一字不漏地放在函数体所有语句之前。
  1. function strict()
  2. {
  3.   // 函数级别严格模式语法
  4.   'use strict';
  5.   return "Hi!  I'm a strict mode function!" ;
  6. }
  7. function notStrict() {
  8.   return "I'm not strict.";
  9. }
复制代码

let
  let 允许把变量的作用域限制在块级域中。与 var 不同处是:var 申明变量要么是全局的,要么是函数级的,而无法是块级的。
let vs var
let的作用域是块,而var的作用域是函数
  1. 'use strict';
  2. var a = 5;
  3. var b = 10;
  4. if (a === 5) {
  5.   let a = 4; // The scope is inside the if-block
  6.   var b = 1; // The scope is inside the function
  7.   console.log(a);  // 4
  8.   console.log(b);  // 1
  9. }
  10. console.log(a); // 5
  11. console.log(b); // 1
复制代码

let在循环中
可以使用let关键字绑定变量在循环的范围而不是使用一个全局变量(使用var)定义。
  1. 'use strict';
  2. for (let i = 0; i < 10; i++) {
  3.   console.log(i); // 0, 1, 2, 3, 4 ... 9
  4. }
  5. console.log(i); // i is not defined
复制代码

上面报错,因为变量i不存在于for语句外的作用域中。let创建块级作用域变量的,使用var创建一个全局变量。
const
const这个声明创建一个常量,可以全局或局部的函数声明。
一个常量可以是全局的或者是局部的,常量遵循与变量相同的作用域规则。
一个常量不可以被重新赋值,并且不能被重复声明.所以,虽然可以在声明一个常量的时候不进行初始化,但这样做是没有意义的,因为这个常量的值永远会保持undefined。
一个常量不能和它所在作用域内的其他变量或函数拥有相同的名称。
示例 下面的例子演示了常量的行为。
  1. const num = 10;
  2. num =20;
  3. console.log(num); // 10
复制代码
如果我们在上面声明常量num,在声明var num,这时会报错,num已经声明。
  1. const num = 10;
  2. var num = 20;
  3. console.log(num); // 'num' has already been declared
复制代码

块级作用域
  很多语言中都有块级作用域,JavaScript使用var声明变量,以function来划分作用域,大括号“{}” 却限定不了var的作用域。用var声明的变量具有变量提升(declaration hoisting)的效果。
ES6里增加了一个let,可以在{}, if, for里声明。用法同var,但作用域限定在块级,let声明的变量不存在变量提升。
  1. 'use strict';
  2. function f1() {
  3.   var a = 1;
  4.   let n = 2;
  5.   if (true) {
  6.       var a = 20;
  7.       let n = 10;
  8.   }
  9.   console.log(n); // 2
  10.   console.log(a); // 20
  11. }
  12. f1();
复制代码

类声明和类表达式
  ES6 中的类实际上就是个函数,而且正如函数的定义方式有函数声明和函数表达式两种一样,类的定义方式也有两种,分别是:类声明、类表达式。
类声明   类声明是定义类的一种方式,就像下面这样,使用 class 关键字后跟一个类名(这里是 Ploygon),就可以定义一个类。
  1. 'use strict';
  2. class Polygon {
  3.   constructor(height, width) {
  4.     this.height = height;
  5.     this.width = width;
  6.   }
  7. }
复制代码

变量提升   类声明和函数声明不同的一点是,函数声明存在变量提升现象,而类声明不会。也就是说,你必须先声明类,然后才能使用它,否则代码会抛出 ——ReferenceError 异常,像下面这样:
  1. var p = new Polygon(); // ReferenceError

  2. class Polygon {}
复制代码

类表达式
类表达式是定义类的另外一种方式,就像函数表达式一样,在类表达式中,类名是可有可无的。如果定义了类名,则该类名只有在类体内部才能访问到。
  1. 'use strict';
  2. // 匿名类表达式
  3. var Polygon = class {
  4.   constructor(height, width) {
  5.     this.height = height;
  6.     this.width = width;
  7.   }
  8. };
  9. // 命名类表达式
  10. var Polygon = class Polygon {
  11.   constructor(height, width) {
  12.     this.height = height;
  13.     this.width = width;
  14.   }
  15. };
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

ionic4视频教程

Archiver|手机版|小黑屋| PhoneGap中文网 ( 京ICP备13027796号-1 )  

GMT+8, 2024-11-22 14:28 , Processed in 0.047496 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表