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 相关文章推荐
有关DOM元素与事件的3个谜题
Nov 11 Javascript
使用jQuery validate 验证注册表单实例演示
Mar 25 Javascript
JS应用正则表达式转换大小写示例
Sep 18 Javascript
JQuery点击行tr实现checkBox选中的简单实例
May 26 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
Mar 04 Javascript
vue.js 获取当前自定义属性值
Jun 01 Javascript
jQuery validata插件实现方法
Jun 25 jQuery
javascript中关于类型判断的一些疑惑小结
Oct 14 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
Nov 20 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
Apr 11 Javascript
微信小程序开发(二):页面跳转并传参操作示例
Jun 01 Javascript
详解JavaScript数据类型和判断方法
Sep 04 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解析json数据实例
2014/08/19 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
原生JS实现前端本地文件上传
2018/09/08 Javascript
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
python进行参数传递的方法
2020/05/12 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
建筑工程自我鉴定
2013/10/18 职场文书
电子专业求职信
2014/06/19 职场文书
安全生产标语大全
2014/10/06 职场文书
化验员岗位职责
2015/02/14 职场文书
推荐信范文大全
2015/03/27 职场文书
小学教师读书笔记
2015/07/01 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
导游词之上海豫园
2019/10/24 职场文书
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang