W3C Group的JavaScript1.8新特性介绍

dh20156 2009-05-18 09:19:42
加精
在了解了JavaScript1.7的相关更新后,我们再继续关注JavaScript1.8的新特性。在W3C Group带来的JavaScript系列特性文章中,JavaScript1.8的更新相对较少!JavaScript 1.8 计划作为Gecko 1.9(将要合并在Firefox 3中)的一部分开始使用的。比起JavaScript 1.7来说,这只是很小的更新,不过它也确实包含了一些向ECMAScript 4/JavaScript 2进化的痕迹。JavaScript 1.8还将包含在JavaScript 1.6 和 JavaScript 1.7中的所有新特性。
使用 JavaScript 1.8

为了可以在HTML中使用 JavaScript 1.8 的新特性,需要如下这样写:

<script type="application/javascript;version=1.8"> ... 你的代码 ... </script>

在使用 JavaScript shell 、JavaScript XPCOM 组件,或者 XUL <script> 元素的时候,就是自动使用最新的JS版本(Mozilla 1.9中的 JS1.8)。

如果需要使用新的关键字 "yield" 和 "let" 的话,你就要指定是1.7版本或者更高的版本,因为已经写好的那些代码可能会把这两个关键字用作变量名或者函数名。如果并没有使用任何新的关键字,就可以不用指定JavaScript的版本。
表达式闭包

这个新添加的特性其实就是简单函数的方便写法,使得这个语言更加类似典型的Lambda notation.


JavaScript 1.7 以及更老的版本:

function(x) { return x * x; }

JavaScript 1.8:

function(x) x * x

这个语法允许你省略花括号和 'return' 语句 -- 隐式的做它们的工作。用这种方法写,就只是表面上看起来短了一些,并没有其他好处。

示例:

绑定事件处理器的简单写法:

document.addEventListener("click", function() false, true);

把这个定义与JavaScript 1.6中的一写数组函数一起使用:

elems.some(function(elem) elem.type == "text");
生成器表达式

这个新添加的特性,允许你简单的创建生成器(在JavaScript 1.7引入的)。通常你以前需要创建一个自定义的函数,它含有一个 yield,但是这个新特性使你可以使用类似数组概念的语法来创建一个独立的生成器句柄。

在 JavaScript 1.7 中,你可能需要写出想下面这样的代码来为一个对象创建自定义的生成器:

function add3(obj) {
for ( let i in obj )
yield i + 3;
}

let it = add3(someObj);
try {
while (true) {
document.write(it.next() + "<br>\n");
}
} catch (err if err instanceof StopIteration) {
document.write("End of record.<br>\n");
}

在 JavaScript 1.8 中,你可以规避要重建生成器函数的麻烦,而使用一个生成器表达式来代替:

let it = (i + 3 for (i in someObj));
try {
while (true) {
document.write(it.next() + "<br>\n");
}
} catch (err if err instanceof StopIteration) {
document.write("End of record.<br>\n");
}

生成器表达式也可以像数值那样被传给一个函数。非常值得注意的是,生成器在绝对必要的有用的时候才被运行(并不像典型的数组概念的条件那样,预先搭好数组的结构)。这个区别可以从下面的例子中看到:

使用JavaScript 1.7 数组理念

handleResults([ i for ( i in obj ) if ( i > 3 ) ]);

function handleResults( results ) {
for ( let i in results )
// ...
}

使用 JavaScript 1.8 的生成器表达式

handleResults( i for ( i in obj ) if ( i > 3 ) );

function handleResults( results ) {
for ( let i in results )
// ...
}

这两个例子之间最大的区别就是,使用生成器表达式的时候,只需要循环那个 'obj' 结构一次,总共;而在第一个例子中,将会在递归的时候再循环一次。
JavaScript 1.8.1

JavaScript 1.8.1包含在Gecko1.9.1(将整合到Firefox3.5中)中。该版本只有很少的更新,主要集中在添加实时编译跟踪,参见:Tracemonkey just-in-time compiler。
当然其中较为显著的改变是移除了API中的callback分支,替换了callback操作,参见:detailed in this newsgroup posting。

添加的部分

Object.getPrototypeOf()
This new method returns the prototype of a specified object.
该方法将返回指定对象的原型。

New trim methods on the String object
The String object now has trim(), trimLeft(), and trimRight() methods.
String对象现在将具有trim(),trimLeft(),和trimRight()方法。
...全文
358 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinqinglhj 2010-01-23
  • 打赏
  • 举报
回复
学习了
xj150145223 2009-08-18
  • 打赏
  • 举报
回复
走在时尚前沿。关注新技术。呵呵
princefbx 2009-05-21
  • 打赏
  • 举报
回复
学习啊!
e98123 2009-05-19
  • 打赏
  • 举报
回复
这个1.8的要在什么环境下才能用呢?
hewpalm 2009-05-19
  • 打赏
  • 举报
回复
xuexi~~~
wsq279024988 2009-05-19
  • 打赏
  • 举报
回复
学习一下啊
机器圣手 2009-05-19
  • 打赏
  • 举报
回复
继续关注!
dh20156 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 yhjhoo 的回复:]
IE 不支持也就是说这个东西暂时没有什么用了
[/Quote]

先了解。
yudylaw 2009-05-19
  • 打赏
  • 举报
回复
trim加的好。
yhjhoo 2009-05-19
  • 打赏
  • 举报
回复
IE 不支持也就是说这个东西暂时没有什么用了
dh20156 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 e98123 的回复:]
这个1.8的要在什么环境下才能用呢?
[/Quote]
目前已知的有Firefox 3
wisword 2009-05-19
  • 打赏
  • 举报
回复
向ruby看齐?
redhat2 2009-05-18
  • 打赏
  • 举报
回复
关注


.


人力资源
陌上花花 2009-05-18
  • 打赏
  • 举报
回复
学习了,帮顶下
hookee 2009-05-18
  • 打赏
  • 举报
回复
~jF
飘零雾雨 2009-05-18
  • 打赏
  • 举报
回复
mark
liangweiwei130 2009-05-18
  • 打赏
  • 举报
回复
支持
fdjkvhfkjdj 2009-05-18
  • 打赏
  • 举报
回复
学习中
s_liangchao1s 2009-05-18
  • 打赏
  • 举报
回复
Mark
wtcsy 2009-05-18
  • 打赏
  • 举报
回复
Up
我的大板凳!~
加载更多回复(11)

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧