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移动div层-javascript 拖动层
Mar 22 Javascript
javascript hasFocus使用实例
Jun 29 Javascript
jQuery的运行机制和设计理念分析
Apr 05 Javascript
基于jquery点击自以外任意处,关闭自身的代码
Feb 10 Javascript
jQuery学习笔记之jQuery动画效果
Sep 09 Javascript
JQuery实现绚丽的横向下拉菜单
Dec 19 Javascript
Javascript动画的实现原理浅析
Mar 02 Javascript
深入理解jquery自定义动画animate()
May 24 Javascript
jQuery数组处理函数整理
Aug 03 Javascript
Bootstrap Scrollspy源码学习
Mar 02 Javascript
Windows下Node.js安装及环境配置方法
Sep 18 Javascript
微信小程序实现留言板(Storage)
Nov 02 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
多人战的战术与战略
2020/03/04 星际争霸
用PHP来写记数器(详细介绍)
2006/10/09 PHP
PHP里的中文变量说明
2011/07/23 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
通过Python实现自动填写调查问卷
2017/09/06 Python
Python3实现购物车功能
2018/04/18 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
python实现简单成绩录入系统
2019/09/19 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
高级文秘工作总结的自我评价
2013/09/28 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
公司酒会主持词
2015/07/02 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL