令人费解的Uncaught TypeError:在非对象上调用Object.keys

时间:2013-09-25 17:45:38

标签: javascript

我有这段代码:

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

结果是(Chrome):

Uncaught TypeError: Object.keys called on non-object 

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

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

1 个答案:

答案 0 :(得分:7)

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

明确核对

完成规范(解释逻辑):

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

  

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

Type Null null typeofhttp://www.ecma-international.org/ecma-262/5.1/#sec-8.2

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

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

事实上,typeof x === "object"满足TypeError并触发{{1}}例外