JavaScript 6 看上去很美
admin 13年前
本文是从 <a href="/misc/goto?guid=4958316894150804363">ECMAScript 6 looks promising</a> 这篇文章翻译而来。 <p> JavaScript 6 让我很兴奋,这是我看了 David Herman 在 YUIConf 2011 大会上的<a href="/misc/goto?guid=4958316894946899781">演讲</a>后的反应。我非常希望这些语言特征能尽快的在 V8 引擎上实现,这样我就可以在 node.js 里使用它们了。这些新增加的语言特征对于一个使用 JavaScript 的程序员来说,解决了很多以前使用起来很不方便的东西。尽管这个标准中 2013 年才能制定完成(大会上 David 这样说的),谷歌浏览器和火狐浏览器很有可能会提前实现这些特征。</p> <p> 从我个人来说,下面的这些特征我很感兴趣:</p> <p> <strong><code>let</code> 关键字</strong></p> <p> <code>let</code> 关键字能产生一个代码块内的变量范围。因为 <code>var</code> 有一个函数式的范围概念,这有时候容易产生出不注意的错误。以后,我们完全使用 <code>let </code>来代替<code>var</code>,从而避免这样的错误。</p> <p> <strong>缺省参数</strong></p> <div class="cnblogs_code"> <pre><span style="color:#0000ff;">function</span> foo (bar="baz") { console.log (bar); }</pre> </div> <p> 有了缺省参数,省去了很多折腾的代码。</p> <p> <strong>非严格的解构方式</strong></p> <p> 很像 Python 语言,解构时不需要严格匹配。</p> <div class="cnblogs_code"> <pre>let [x,y] = [3,4,5]; <span style="color:#008000;">//</span><span style="color:#008000;"> x=3, y = 4</span></pre> </div> <p> <strong>多行模式的字符串表达</strong></p> <p> 你可以简单的使用 <code>`</code> (反点号)操作符来声明一个多行字符串。</p> <div class="cnblogs_code"> <pre><span style="color:#0000ff;">var</span> htmlString = `Say hello tomulti-linestrings!`</pre> </div> <p> <strong>模板化</strong></p> <p> 你可以通过这种方式把 JavaScript 变量嵌入到字符串中:</p> <div class="cnblogs_code"> <pre><span style="color:#0000ff;">var</span> firstName = "Jack"; <span style="color:#0000ff;">var</span> message = `Hello ${firstName}!`; <span style="color:#008000;">//</span><span style="color:#008000;"> "Hello Jack!"</span></pre> </div> <p> <strong>List 复合操作</strong></p> <p> 同样,这也是一个非常 Python 的结构:</p> <div class="cnblogs_code"> <pre>let even = [ x <span style="color:#0000ff;">for</span> (x <span style="color:#0000ff;">in</span> values ([1,2,3,4,5,6])) <span style="color:#0000ff;">if</span> (x %2 === 0) ];</pre> </div> <p> 使用 <code>values ()</code> 能够让 <code>x</code> 来表示 List 里的成员的值,而不是成员变量。你也可以使用新的 <code>for of</code> 语法来实现这样的功能:</p> <div class="cnblogs_code"> <pre>let even = [ x <span style="color:#0000ff;">for</span> (x of [1,2,3,4,5,6]) <span style="color:#0000ff;">if</span> (x%2 === 0) ];</pre> </div> <p> 除此之外, <code>map</code>, <code>filter</code>, <code>reduce</code> 等等概念也将会成为新标准的<a href="/misc/goto?guid=4958316895726014054">内容之一</a> (有一些功能已经在谷歌浏览器和火狐浏览器里被实现,<a href="/misc/goto?guid=4958316896521010006">IE9</a>也有不少这方面的改进)。</p> <p> <strong>更新:</strong></p> <p> 发现这个帖子被顶到了 HN 的首页,我必须要加上遗漏的新标准中的模块系统操作功能。演讲中的例子:</p> <div class="cnblogs_code"> <pre>import { $ } from "jquery.js" import { map, each } from "underscore.js"</pre> </div> <p> 还是一样,全是 Python 的套路!被引用的 JavaScript 文件会代码执行前加载的你的浏览器中。<br /> <br /> 来自: <a id="link_source2" href="/misc/goto?guid=4958316897301239867" target="_blank">外刊IT评论</a></p>