chrome和IE 11中的Object.keys行为

And*_*vic 7 javascript internet-explorer google-chrome

今天我使用Object.keys收到错误,因为我意外地传递了非对象值,如下所示:

var filter = true;
var filterKeys = Object.keys(filter);
Run Code Online (Sandbox Code Playgroud)

在Chrome中这很好用,但是在IE 11中我得到了异常并且在调试后发现在IE 11中Object.keys抛出异常Object.keys:参数不是Object.

在这种情况下,IE11表现得更好,因为值true确实无效,但chrome返回空数组.Object.keys是ECMAScript标准,如果你看http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.3.14,它说:

  1. 如果Type(O)不是Object,则抛出TypeError异常.

所以有人知道为什么谷歌Chrome实现的行为与ECMAScript规范标准不同,因为我一直认为所有现代浏览器都应该以相同的方式实现ECMAScript.

Rob*_*obG 7

所以有人知道为什么谷歌Chrome实现的行为与ECMAScript不同

这取决于浏览器实现的ECMAScript版本.

ECMA-262 ed 6(现行标准)中,第一步是:

  1. 设obj为ToObject(O)

ES5中,第一步是:

  1. 如果Type(O)不是Object,则抛出TypeError异常.

因此,您可以说Chrome与第6版(它将原始的true转换为布尔对象)和使用ES5的IE(它会引发TypeError异常)一致,因此两者都符合标准的不同版本.