(以下は、編集前に「私はできると思います...」と言ってい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()
toString
response
toString
Object.prototype
Object.prototype