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 相关文章推荐
用js计算页面执行时间的函数
Dec 07 Javascript
在图片上显示左右箭头类似翻页的代码
Mar 04 Javascript
页面内容排序插件jSort使用方法
Oct 10 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
react-router JS 控制路由跳转实例
Jun 15 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
Jul 17 Javascript
移动web开发之touch事件实例详解
Jan 17 Javascript
jquery ajax 请求小技巧实例分析
Nov 11 jQuery
JS实现简易日历效果
Jan 25 Javascript
教你使用vscode 搭建react-native开发环境
Jul 07 Javascript
vue中div禁止点击事件的实现
Apr 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中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
Python中字典的基本知识初步介绍
2015/05/21 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
不拖欠农民工工资承诺书
2014/03/31 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
文明班级建设方案
2014/05/15 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
人代会简报
2015/07/21 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python