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 例外をスローします。

これTypeは(http://www.ecma-international.org/ecma-262/5.1/#sec-8.2Null用ですnull

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 に答える