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 NaN和Infinity特殊值 [译]
Sep 20 Javascript
通过上下左右键和回车键切换光标实现代码
Mar 08 Javascript
javascript实现的元素拖动函数宿主为浏览器
Jul 21 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
Apr 21 Javascript
javascript中基本类型和引用类型的区别分析
May 12 Javascript
javascript实现日期时间动态显示示例代码
Sep 08 Javascript
three.js快速入门【推荐】
Jan 21 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
Jul 24 Javascript
js 计数排序的实现示例(升级版)
Jan 12 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
Vue实现购物车实例代码两则
May 30 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
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python机器学习实战之K均值聚类
2017/12/20 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
python pandas修改列属性的方法详解
2018/06/09 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
白酒市场营销方案
2014/02/25 职场文书
企业职业病防治方案
2014/05/29 职场文书
白酒营销策划方案
2014/08/17 职场文书
交警失职检讨书
2015/01/26 职场文书
南京导游词
2015/02/03 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
Java字符串逆序方法详情
2022/03/21 Java/Android
讨论nginx location 顺序问题
2022/05/30 Servers
Python如何将list中的string转换为int
2022/07/15 Ruby