3

我有这个代码:

if(typeof x == 'object')
    return "{"+Object.keys(x)+"}";

结果是(Chrome):

Uncaught TypeError: Object.keys called on non-object 

谁能告诉我这里发生了什么?顺便说一句:Firefox 也是如此。

ps:不知道对象是什么。Firefox 调试失败了。

4

1 回答 1

7

x最有可能null(这是一个对象)。您应该明确检查if(typeof x === 'object' && x !== null)

浏览规范(解释逻辑):

Object.keys: http: //www.ecma-international.org/ecma-262/5.1/#sec-15.2.3.14读取

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

TypeNullnullhttp://www.ecma-international.org/ecma-262/5.1/#sec-8.2

typeof: http: //www.ecma-international.org/ecma-262/5.1/#sec-11.4.3

该表显示typeof null实际上是"object"

所以实际上null满足typeof x === "object"并触发TypeError异常

于 2013-09-25T17:50:58.483 回答