1

したがって、jQuery ajax呼び出しがあり、応答がオブジェクトであることを確認したいと思います。

私の最初の考えはでしif(typeof response === "object")たが、問題があります。ajaxリクエストが何も返さない場合(ただし、200ヘッダーでヒットした場合)はresponseですnull

ここでの問題はそれtypeof null === "object"です。

{}では、応答が実際にオブジェクトであることをどうやって知ることができますか?

私はできると思いますif(typeof response === "object" && response !== null)

しかし、これは本当に冗長に思えます...

4

2 に答える 2

2

(以下は、編集前に「私はできると思います...」と言っていnullました。条件に新しい情報が追加されるため、チェックは冗長ではありません。)

明示的に除外することができますnull

if (response !== null && typeof response === "object")

これは、配列を含むすべてのオブジェクトに当てはまることに注意してください。

配列やその他の組み込みオブジェクトではなく、のみに当てはまるものが必要な場合は{}、次のように実行できます。

if (Object.prototype.toString.call(response) === "[object Object]")

...Object.prototype.toString仕様で定義されている"[object Null]"ためnull"[object Array]"配列、"[object Date]"日付など。仕様で定義されていないコンストラクター関数を介して作成されたオブジェクト(逆シリアル化されたJSONを処理している場合は、リバイバー関数...)もとして出てきます"[object Object]"。(たとえば、function Fooコードにがあり、を介してオブジェクトを作成した場合、上記のコードは[悲しいことに]ではなく、そのオブジェクトに対してnew Foo()返されます。)"[object Object]""[object Foo]"

またはそのプロトタイプチェーンによってオーバーライドされた可能性があるため、はと同じでObject.prototype.toString.call(response)ないことに注意してください。したがって、fromを直接使用します。これは、(変更などの本当に愚かなことを誰かが行うことを除けば)仕様どおりに動作することがわかっているためです。response.toString()toStringresponsetoStringObject.prototypeObject.prototype

于 2012-11-04T08:55:05.137 に答える
1

I have a jQuery ajax call, and I want to make sure that the response is an object

これは、jQueryを引き続き使用できることを意味しますか?$ .isPlainObjectを使用するのはどうですか?

if ($.isPlainObject(response)){ /* */ }
于 2012-11-04T10:38:10.347 に答える