
2011年,在YUIConf听了David Herman的演讲之后,我开始对ECMAScript十分感兴趣。我特别希望能看到它的一些特性能很快应用到V8上,那样我就可以再node.js上用它了。这些附加功能能解决很多新手用JavaScript时面对的常见问题,尽管规格要到2013年才能最终应用(David在录像中是这样说的),但它的很多特性却会在此之前就能给Chrome和Firefox带来改变。
就我个人而言,我很期待下面的一些特性:
let关键字
let关键字可以由一个块作用域。由于var关键字的作用范围是一个函数,它有时候会导致一些意想不到的bug。为此,我们可以用let来代替var来避免此类bug。
默认参数
function foo(bar="baz") {
console.log(bar);
}
有了默认参数以后,我们就不需要令人费解的选择对象模式了(the convoluted object pattern)。
不严格的解析
看起来像Python,但没有那么严格。
let [x,y] = [3,4,5]; // x=3, y = 4
多行语句
你可以仅仅使用一个`(反引号)来指示多行语句。
var htmlString = `Say hello to
multi-line
strings!`
模板
你可以在你的语句中像下面这样内嵌JavaScript变量:
var firstName = "Jack";
var message = `Hello ${firstName}!`; // "Hello Jack!"
列表解析List comprehension
又是一个Python风格的结构:
let even = [ x for (x in values([1,2,3,4,5,6])) if (x %2 === 0) ];
values()让x就可以指示元素值,而不需要元素下标(element indice)。同样的功能也可以用for of结构来表达:
let even = [ x for(x of [1,2,3,4,5,6]) if (x%2 === 0) ];
除此以外,map,filter,reduce和其他的一些新的用法会成为新特性(https://developer.mozilla.org/Special:Tags?tag=ECMAScript5)的一部分(这些特性有的已经在Chrome、Firefox和IE9(gasp,http://msdn.microsoft.com/en-us/library/ff679973(v=vs.94).aspx)中实现了)。
更新:
由于注意到这篇文章在HN的首页上出现了,所以我加上了我之前遗漏的建议的模块系统(the proposed module system)。这是演讲中例子:
import { $ } from "jquery.js"
import { map, each } from "underscore.js"
同样,这还是Python风格的!所指示的JavaScript文件将会在代码执行后由你的浏览器加载。
本文作者: Andrew Flocchini,作为苹果的管理者在Minnesota的一个大学中工作,推广了苹果的应用。在这里可以看到作者本人对他自己的一个非常生动有趣的自我介绍。
原文链接: ECMAScript 6 looks promising