JavaScript 1.7的新特性在不同浏览器中的支持情况如何?特别是数组推导和"let"语句

16 投票
3 回答
7294 浏览
提问于 2025-04-15 13:52

https://developer.mozilla.org/en/New_in_JavaScript_1.7

很多新功能都是借鉴自Python的,这样可以让我们写的应用程序更简洁,这总是件好事。你有没有想过,多少次你为了做一些简单的操作而输入了

for (i = 0; i < arr.length; i++) {
    /* ... */
}

这些代码?如果这样写会不会更简单:

[/* ... */ for each (i in arr)]

我觉得简洁是个好事。不过,最后一切都得看IE(Internet Explorer)支持不支持这些新功能。

那么,IE支持这些新功能吗?其他浏览器呢?

3 个回答

1

除了IE浏览器不支持这个功能外,基于Webkit的浏览器(比如Safari和Chrome)虽然声称支持JS 1.7(实际上是执行那些标记为JS 1.7的脚本),但它们实际上并不支持这些特性。这就意味着,目前只有Geko浏览器才能使用JS 1.7那些很不错的功能。

而且,由于Webkit仍然只执行标记为1.7的脚本,这也意味着当我们在这些浏览器中使用任何新的关键字或语法时,无法优雅地处理错误,只会出现语法错误。

33

虽然这个问题有点旧了,并且标记为“已回答”,但我在谷歌上找到了它,发现给出的答案可能不太准确,或者说不完整。

很重要的一点是,Javascript 不是一个标准。Ken 正确地提到,ECMAScript 是所有浏览器都希望遵循的跨浏览器标准,但他没有说明的是,Javascript 不是 ECMAScript。

说 Javascript “实现”了 ECMAScript,意思是 Javascript 包含了 ECMAScript 的内容,还加上了自己的一些独特功能,这些功能并不是所有浏览器都支持的。nicholas 提到的 for each 示例就是 Mozilla 添加的一个独特功能,这个功能在任何标准中都没有,因此其他浏览器不太可能采用。

Javascript 1.7 和 1.8 的一些功能对于 XUL 的扩展开发很有用,但绝对不应该用于跨浏览器开发——这就是标准存在的意义。

8

不,提到“JavaScript”时,他们是字面意思:指的是Gecko使用的ECMAScript引擎。JScript和其他引擎(据我所知)不支持这些功能。

补充一下:根据维基百科,JavaScript 1.7实现了ECMAScript的“第三版加上所有JavaScript 1.6的增强功能,还有类似Python的生成器和数组推导式([a*a for (a in iter)]),使用let的块级作用域,以及解构赋值(var [a,b]=[1,2])”。所以这些功能并不是ECMAScript的一部分。

撰写回答