JavaScript 1.7的新特性中,什么是跨浏览器支持?具体来说,如何支持数组推导和"let"语句?

16

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

许多这些新功能都是从Python借鉴来的,可以创建更少冗长的应用程序,这总是一件好事。你有多少次键入了

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

对于非常简单的操作,这样做会更容易:

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

我认为简洁是一件好事。但归根结底,这一切都取决于IE。

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


1
IE不支持Javascript 1.7。IE有自己的实现-JScript-具有自己的扩展,例如条件编译。 - kangax
3个回答

33

虽然这个问题有点老了,并且被标记为“已回答” - 但我在谷歌上找到了它,给出的答案可能不准确,或者如果不是,肯定是不完整的。

非常重要的一点是要注意,Javascript不是一个标准。Ken正确地提到了ECMAScript是所有浏览器都力图遵守的跨浏览器标准,但他没有澄清的是Javascript不是ECMAScript。

说Javascript“实现”ECMAScript意味着Javascript包括ECMAScript以及自己专有的非跨浏览器功能。nicholas给出的for each示例是Mozilla添加的专有功能的示例,不属于任何标准,因此不太可能被其他浏览器采用。

Javascript 1.7和1.8功能对于XUL中的扩展开发非常有用,但不应该用于跨浏览器开发 - 这就是标准的作用。


说得好。上述的 Pythonic 示例在除 Firefox 以外的浏览器中无法工作。 - arunkjn
1
ECMAScript 6的Harmony草案似乎将添加这个功能 :D(http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions) - Jamie Pate

8
不,当他们说“JavaScript”时,他们字面上指的是Gecko使用的ECMAScript引擎。JScript和其他引擎(据我所知)不支持这些功能。
编辑:根据wikipedia,JavaScript 1.7实现了ECMAScript“第3版加上所有JavaScript 1.6增强功能,以及Pythonic生成器和数组理解([a*a for(a in iter)]),带有let的块作用域,解构赋值(var [a,b] = [1,2])”。因此,这些功能不是ECMAScript的一部分。

1

除了IE不支持它之外,似乎基于Webkit的浏览器(Safari、Chrome)虽然声称支持JS 1.7(实际上执行被声明为JS 1.7的脚本标签),但实际上并不支持任何这些功能,这意味着目前,具有非常好的功能的JS 1.7仅限于Geko浏览器。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接