更新:チケットを作成しました: http://bugs.jquery.com/ticket/12191
jQuery の$.type()
関数は[[Class]]
、オブジェクトの内部プロパティ (小文字) を返します。例えば:
$.type( {} ) // "object"
$.type( [] ) // "array"
$.type( function () {} ) // "function"
ただし、次のタイプのオブジェクトに対してのみ機能します。
Boolean Number String Function Array Date RegExp Object
jQuery のソース コードのこのセクションで指定されています。
// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});
これらのタイプのオブジェクトに加えて、ECMAScript 標準では[[Class]]
、これらに対応する内部プロパティが定義されています。
Arguments Error JSON Math
これは、ECMAScript 標準の次の文で指定されています (セクション 8.6.2 )。
ホスト オブジェクトの [[Class]] 内部プロパティの値は、"Arguments"、"Array"、"Boolean"、"Date"、"Error"、"Function"、"JSON" のいずれかを除く任意の文字列値である可能性があります。 、「数学」、「数値」、「オブジェクト」、「正規表現」、および「文字列」。
$.type
"object"
これらのタイプのオブジェクトの戻り値:
$.type( new Error ) // "object"
$.type( JSON ) // "object"
$.type( Math ) // "object"
(function () { $.type( arguments ); /* "object" */ }())
"error"
、"json"
、 、"math"
の代わりに"arguments"
、実際の[[Class]]
値 (大文字) です。
たとえば、オブジェクトを返す取得メソッドを$.type
使用するため、必要に応じて正しい値を返すことができることを明確にしたいと思います。Object.prototype.toString.call()
"[object Error]"
Error
では、なぜ jQuery"object"
はこれら 4 つの値ではなくレポートを作成するのでしょうか? とはインスタンスではなくシングルトン オブジェクトであるため、JSON
理解できました。は、JavaScript プログラムによって明示的に作成されたインスタンス (のように) ではなく、自動的に提供されるオブジェクトであるため、Math
も理解できました。なぜエラーを購入しますか?オブジェクトを特別なものにする理由がわかりません( 、 などの他のネイティブタイプと比較して)。arguments
var args = new Arguments;
Error
Date
Array
tl;dr
$.type( new Error ) // why does this return "object" instead of "error"?
更新: 1 つのことを明確にするために、ソース コードを調べて、この動作の原因となるコードを見つけたので、インスタンスが$.type
返さ"object"
れる理由を知っています。Error
なぜ$.type
がそのように動作するように定義されているのか知りたいです。