OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

io.js新支持的ECMAScript 6功能特性详解


分享到
分类 技术前沿   关键字 开源   发布 kris  1421379581274
注意 转载须保留原文链接,译文链接,作者译者等信息。  
io.js第一个版本正式发布, 将默认支持JavaScript 的 ES6 标准,并不需要 --harmony 标签  (注* 在NodeJS中启用ECMAScript 6

下面的这些ES6特性将不需要任何标签就可直接使用:

  • Block scoping (let, const)
  • Collections (Map, WeakMap, Set, WeakSet)
  • Generators
  • Binary and Octal literals
  • Promises
  • New String methods
  • Symbols
  • Template strings

那么这些功能都能干什么,具体怎么用?看看示例代码就可一目了然。部分示例来自 MDN


Block scoping (let, const)


let, const  声明的变量,将只能在块级 {} 作用域中使用和访问。


(function() {

  //let 需要在 strict模式下才能使用
  'use strict'

  var a = 1

  {
    var b = a + 1
    let c = a + b
  }

  console.log(a, b, typeof c)

})()

//$>1 2 'undefined'


Collections  (Map, WeakMap, Set, WeakSet)


新的集合类型,WeakMap, WeakSet 是一种弱引用类型,因此WeakMap键值不能枚举(即有没有办法给你key的列表)。这样做的好处是有利于垃圾回收。如果你想有键列表,你应该自己维护。

主要看Map和Set,

Map 类似于 HashMap, 与Object {}不同,可用各种类型的变量作为key

var myMap = new Map();
var keyFunc = function () {};

// 设置值
myMap.set(keyFunc, "Function Key");

console.log(
  myMap.get(keyFunc)
)

//$> Function Key

Set 类似于索引,Redis 一般用这种数据类型来做索引和查询 参见: 在nodejs使用Redis

var mySet = new Set();

mySet.add(1);
mySet.has(1);     // true
mySet.delete(1);  // 从set中移除
mySet.has(1);     // false


Binary and Octal literals


二进制和八进制语法

十进制

var o = 1234567890

//使用0前辍时注意:

var a = 0888  //888解析为十进制 (比7大)
var b = 0777  //解析为八进制, 511


二进制 0b开头代表二进制

var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648

Generators


Generators*声明(function关键字后跟一个星号)定义了一个 generator 功能。

generator可以先退出一个函数,然后重新调用next()时重新进入该function。它们的上下文(变量)将在重进入前被保存。

这样就形成一个函数链,避免回调嵌套, koa web server框架使用了这种机制


function* idMaker(){
    var index = 0;
    while(true)
        yield index++;
}

var gen = idMaker();

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2

Promise


Promise 对象用于延迟和异步计算。可有效避免JavaScript回调函数的深层嵌套,原本是一种设计模式,ES6将这种模式内置其中,一般Promise会有三种状态:
待定:初始状态,没有履行或拒绝。
完成:操作成功
拒绝:操作失败。

var jsonPromise = new Promise(function(resolve, reject) {
  //解析错误,由catch捕获
  resolve(JSON.parse("This ain't JSON"));
});

jsonPromise.then(function(data) {
  console.log("It worked!", data);
}).catch(function(err) {
  console.log("It failed!", err);
});

//$> It failed! [Syntax Error: Unexpected tocken T]


Template strings


模板字符串允许在字符串中嵌入的表达式。
前两天Chrome刚支持 字符串模板 ,iojs 就加进去了

var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);

//$> "Fifteen is 15 and
//$> not 20."


New String methods


String 添加了更多的的新函数,参见MDN

String.fromCodePoint()
String.prototype.codePointAt()
String.prototype.startsWith()
String.prototype.endsWith()
String.prototype.contains()
String.prototype.repeat()
String.prototype.normalize()
String.raw()




Symbol


Symbol(符号)是一个独特的和不可改变的数据类型,并且可以被用作标识符对象属性。Symbol对象的Object key值属性对外是隐藏的。
如下例 "a" 只能通过 key 来访问,可以实现类似 private 访问控制符的效果


var obj = {};
var key = Symbol("a");

obj[key] = "a";
obj["b"] = "b";

for (var i in obj) {
  console.log(i);
}

//$> b


社区评论 ( Beta版 )
  • #0 孟多比 1429199942794

    Python不可维护? 终于把一个8万行的Python程序用Javascript重写了

OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 2014年最受欢迎的前十大语言:JavaScript、PHP、Java排前三
  2. 主流JavaScript MVC框架性能比较测试:Angular vs Backbone vs Ember
  3. AngularJS在大型单页面应用中的性能优化(一)
  4. CSS3实现的响应式字体:自适应视图窗口大小的新单位
  5. JavaScript代码组织结构良好的5个特点[reuqire.js]
  6. 5个现在就该使用的数组Array方法: indexOf/filter/forEach/map/reduce详解
  7. io.js新图标logo征集中
  8. AngularJS在大型单页面应用中的性能优化(二)
  9. WebPack:更优秀的模块依赖管理工具,及require.js的缺陷
  10. 在nodejs使用Redis缓存和查询数据及Session持久化(Express)
  11. AirJD-简单好用的免费建站工具

 相关阅读 - 技术前沿
  1. NodeJS连接Redis:安装及开机自动启动设置
  2. Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎
  3. HTML5的TCP和UDP Web Socket API草案定稿
  4. SpiderMonkey的JavaScript引擎[Firefox]性能超越V8[Chrome]
  5. 基于 Web 的 Go 语言 IDE
  6. Nginx的大计划:将原生支持JavaScript
  7. 不需要密码的登录
  8. 15个最好的HTML5前端响应式框架(2014)
  9. Go 语言基础教程:10分钟入门
  10. Docker究竟是什么,为什么这么流行,它的优点和缺陷有哪些?

 关键字 - 开源
  1. 几款开源的图形化Redis客户端管理软件
  2. Mongoose学习参考文档——基础篇
  3. Node.JS如何调用Chrome打开浏览器链接地址
  4. 开源的多行字符串工具: 在JS中整段地写HTML
  5. 使用NodeJS搭建邮件自动发送服务器
  6. 15个最好用的Node.JS后端框架
  7. Github Pages疑似被封: 再也不能用Pages搭建个人博客了
  8. wemall app商城源码android开发MD5加密工具类
  9. 【数据可视化】基础知识贴:10大关键术语
  10. wemall app商城源码中基于PHP的ThinkPHP惯例配置文件代码

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号