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 onkeydown,onkeyup,onkeypress,onclick,ondblclick
Feb 04 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
Nov 30 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
May 15 Javascript
JS正则表达式大全(整理详细且实用)
Nov 14 Javascript
js中日期的加减法
May 06 Javascript
JS查找英文文章中出现频率最高的单词
Mar 20 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
Mar 21 Javascript
jstree单选功能的实现方法
Jun 07 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
Jun 30 Javascript
vue中使用sessionStorage记住密码功能
Jul 24 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
详解Vue 单文件组件的三种写法
Feb 19 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数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
php ci框架验证码实例分析
2013/06/26 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
php处理复杂xml数据示例
2016/07/11 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
PHP7 标准库修改
2021/03/09 PHP
javascript 写类方式之九
2009/07/05 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Python发送邮件实现基础解析
2020/08/14 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
python中封包建立过程实例
2021/02/18 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
介绍一下JNDI的基本概念
2013/07/26 面试题
体育教师个人的自我评价
2014/02/16 职场文书
导师就业推荐信范文
2014/05/22 职场文书
结对共建工作方案
2014/06/02 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
Redis性能监控的实现
2021/07/09 Redis
SQL SERVER触发器详解
2022/02/24 SQL Server