1, 參數是一個對象,核心js對象(native ECMAScript object)或宿主對象(host object),那麼將直接返回該對象。
其產生的物件建構器仍然是所傳參數對象的構造器。這樣造成的後果是雖然該對象是new Object,但其constructor不一定是Object。
複製代碼 代碼如下:
function Person(){this.name='jack';}
var w = new Object(window),
d = new Object(document),
p = new Object(new Person());
console.log(w.constructor); //-> Window
console.log(d.constructor); //-> HTMLDocument
console.log(p.constructor); //-> Person
2, 參數是基本類型對象,如字串(String),數字(Number),布爾值(Boolean),將其封裝成對象(轉換成其對應的封裝類)後返回。
複製代碼 代碼如下:
var s = new Object('hello'),
n = new Object(22),
b = new Object(true);
console.log(typeof s); //-> Object
console.log(typeof n); //-> Object
console.log(typeof b); //-> Object
console.log(s.constructor); //-> String
console.log(n.constructor); //-> Number
console.log(b.constructor); //-> Boolean
從以上看出,當傳參數時,使用new Object產生的對象其構造器不一定指向Object,只有很巧的時候會指向Object,如
複製代碼 代碼如下:
var obj1 = new Object,
obj2 = {};
var o1 = new Object(obj1);
o2 = new Object(obj2);
console.log(o1.constructor); //-> Object
console.log(o2.constructor); //-> Object
以上就能明了為何jquery1.4+中以下代碼返回false了
複製代碼 代碼如下:
function Person(){this.name='jack';}
var p = new Person();
$.isPlainObject(new Object(4)); //-> false
$.isPlainObject(new Object('hello')); //-> false
$.isPlainObject(new Object(true)); //-> false
$.isPlainObject(new Object(p)); //-> false