W3C Group的JavaScript1.8 新特性介绍


Posted in Javascript onMay 19, 2009

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()方法。

Javascript 相关文章推荐
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
Jun 02 Javascript
ajax java 实现自动完成功能
Dec 19 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
Nov 21 Javascript
JavaScript动态修改网页元素内容的方法
Mar 21 Javascript
js实现鼠标划过给div加透明度的方法
May 25 Javascript
js判断登陆用户名及密码是否为空的简单实例
May 16 Javascript
angular源码学习第一篇 setupModuleLoader方法
Oct 20 Javascript
jQuery实现动态给table赋值的方法示例
Jul 04 jQuery
js断点调试心得分享(必看篇)
Dec 08 Javascript
node.js调用C++函数的方法示例
Sep 21 Javascript
javascript canvas封装动态时钟
Sep 30 Javascript
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
JS backgroundImage控制
May 19 #Javascript
jQuery 源代码显示控件 (Ajax加载方式).
May 18 #Javascript
编写兼容IE和FireFox的脚本
May 18 #Javascript
innerText和innerHTML 一些问题分析
May 18 #Javascript
JS 页面自动加载函数(兼容多浏览器)
May 18 #Javascript
Js 本页面传值实现代码
May 17 #Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
May 17 #Javascript
You might like
php格式化工具Beautify PHP小小BUG
2008/04/24 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
2015/12/25 PHP
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
Python去掉字符串中空格的方法
2014/03/11 Python
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
Python切片知识解析
2016/03/06 Python
python分布式环境下的限流器的示例
2017/10/26 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
python实现飞机大战
2018/09/11 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
Python Merge函数原理及用法解析
2020/09/16 Python
如何通过python检查文件是否被占用
2020/12/18 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
建筑工地标语
2014/06/18 职场文书
会议室标语
2014/06/21 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
安全生产感想
2015/08/07 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技