$.isPlainObjcet(平凡對象定義)
isPlainObject: function( obj ) {
var proto, Ctor;
// null 不是一個平凡對象
// 調(diào)用 toString() 方法輸出對象矢渊,判斷 obj 至少是一個對象
if( !obj || toString.call( obj ) !== "[object Object]" ) {
return false;
}
proto = getProto( obj );
// Object.create(null) 創(chuàng)建的對象為 {}毕荐,但是無 __proto__ 屬性,也是平凡對象
if( !proto ) {
return true;
}
// 如果有原型县习,則原型里必須有構(gòu)造對象并且構(gòu)造對象只能是 Object()
Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
}
總結(jié):
- null 不是平凡對象迫悠;
- Object.create(null) 是平凡對象;
- 若有原型于购,則原型里必須有構(gòu)造對象 constructor袍睡,并且 constructor 必須是 Object,例如:{} 就是平凡對象肋僧,而 $("#div") 就不是平凡對象女蜈,因為$()._proto_.constructor 為 jQuery