Chrome 38中的ecmascript 6功能

时间:2014-10-09 21:55:34

标签: javascript google-chrome v8 ecmascript-6

我们在每个页面上都有一个包含许多属性的数组。有时它有一个"值"属性。我们用myArrayObject['values']检查这个并期望字符串或未定义。 更新到Chrome 38 myArrayObject['values']后,返回function values() { [native code] }

经过一番挖掘后,这似乎与V8 ticket实施@@unscopables for the 6th Edition of ecmascript有关。 两个月前这些变化是committed。一个开发人员尝试roll them back with the note that they were "web-breaking"之后不久。

所以问题是,Array.values()是一个没有文档的功能,早期采用ecmascript-6草案,bug还是其他什么?这会被回滚吗?我应该注意哪些其他即将发生的变化?

Chrome 38.0.2125.101(在Win7 64上)中的小示例:

var test=new Array();
// items pushed and popped
...
// test['values'] may have been set at some point
test['values']; //returns a function pointer: function values() { [native code] }.
                // yesterday this returned undefined

编辑:从Bergi的回答中,这看起来像是ES6的一个功能。

在规范发布前几个月,是否会有更多ES6 功能在后台补丁中推出?我能做些什么来保护我们的平台?有什么方法可以请求ES5兼容模式吗?

3 个答案:

答案 0 :(得分:6)

是的,Array.prototype.values来自ES6草案。这是一个返回数组值的迭代器的方法。

如果要在数组中存储未经数字索引的值,则不应使用Array而应使用普通对象(或者,在ES6中使用Map)。

答案 1 :(得分:2)

更正,@@ unscopables从未从V8回滚 - 你链接到的第二个变化只是准备用于紧急情况,但幸运的是,我们不需要它,它是从未犯过。所以@@ unscopables在Chrome 38中提供,因此Array.prototype.values也是如此。

无法关闭ES6功能,因为这样做不会具有前瞻性,依赖它的代码注定会在几个月或其他浏览器中崩溃。

ES委员会通常非常小心,不要“打破网络”。实际上,这意味着没有实际用例应该中断,即Web上已经发生的事情。严格地说,任何改变都会破坏一些假设的代码,因为即使是全新的特征也会显着地改变'eval'的行为。如果我们甚至避免使用严格的标准,那么这种语言就永远不会发展出来。

据我所知,您的具体示例并未出现在野外。正如其他人所回答的那样,在这种情况下没有理由使用数组,[] -syntax与普通对象一样好用。当索引是特定的整数时,你只需要数组。

以前使用新的Array.prototype.values方法浮出水面的唯一网络破坏问题与'with'结构(你不应该使用它)有关。然后介绍了@@ unscopables来解决这个问题。

由于Microsoft OWA 2013中存在错误,

编辑: .values必须再次从V8中删除。但请将此视为临时措施。 Microsoft已意识到此问题,.values将尽快返回。

答案 2 :(得分:1)

Google Chrome 38.0.2125.111不再实施Array.prototype.values

这个小测试

var myArray = new Array();
alert(myArray['values']);
alert(myArray['anotherparameter']);

为两个警报返回undefined

但是,方法hasOwnProperty可用于确定数组是否具有名为values的属性:

var myArray = new Array();
alert(myArray.hasOwnProperty('values')); // alert false
myArray['values'] = "Hello";
alert(myArray.hasOwnProperty('values')); // alert true

这适用于像Opera 25.0.1614.63

那样实现Array.prototype.values的浏览器