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奇异的arguments分析
Oct 20 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
Aug 23 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
Mar 12 Javascript
jQuery中extend()和fn.extend()方法详解
Jun 03 Javascript
bootstrap监听滚动实现头部跟随滚动
Nov 08 Javascript
详解Angular 自定义结构指令
Jun 21 Javascript
vue组件父子间通信详解(三)
Nov 07 Javascript
react build 后打包发布总结
Aug 24 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
基于vue--key值的特殊用处详解
Jul 31 Javascript
Echarts.js无法引入问题解决方案
Oct 30 Javascript
nuxt 实现在其它js文件中使用store的方式
Nov 05 Javascript
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 图片加水印与上传图片加水印php类
2010/05/12 PHP
fgetcvs在linux的问题
2012/01/15 PHP
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
IE php关于强制下载文件的代码
2008/08/23 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
python 网络编程详解及简单实例
2017/04/25 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
python excel和yaml文件的读取封装
2021/01/12 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
外贸业务员工作职责
2014/01/06 职场文书
详细的大学生创业计划书模板
2014/01/27 职场文书
毕业生工作求职信
2014/06/30 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
婚礼父母致辞
2015/07/28 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript