js中關(guān)于new Object時傳參的一些細節(jié)分析
更新時間:2011年03月13日 23:00:31 作者:
這里討論給Object傳參時,其內(nèi)部的處理。參考:ECMA262 V5 15.2.2.1
1, 參數(shù)是一個對象,核心js對象(native ECMAScript object)或宿主對象(host object),那么將直接返回該對象。
其生成的對象構(gòu)造器仍然是所傳參數(shù)對象的構(gòu)造器。這樣造成的后果是雖然該對象是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, 參數(shù)是基本類型對象,如字符串(String),數(shù)字(Number),布爾值(Boolean),將其包裝成對象(轉(zhuǎn)換成其對應(yīng)的包裝類)后返回。
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
從以上看出,當(dāng)傳參數(shù)時,使用new Object生成的對象其構(gòu)造器不一定指向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
其生成的對象構(gòu)造器仍然是所傳參數(shù)對象的構(gòu)造器。這樣造成的后果是雖然該對象是new Object,但其constructor不一定是Object。
復(fù)制代碼 代碼如下:
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, 參數(shù)是基本類型對象,如字符串(String),數(shù)字(Number),布爾值(Boolean),將其包裝成對象(轉(zhuǎn)換成其對應(yīng)的包裝類)后返回。
復(fù)制代碼 代碼如下:
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
從以上看出,當(dāng)傳參數(shù)時,使用new Object生成的對象其構(gòu)造器不一定指向Object,只有很巧的時候會指向Object,如
復(fù)制代碼 代碼如下:
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了
復(fù)制代碼 代碼如下:
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
您可能感興趣的文章:
- js之ActiveX控件使用說明 new ActiveXObject()
- javascript中IE瀏覽器不支持NEW DATE()帶參數(shù)的解決方法
- 關(guān)于js new Date() 出現(xiàn)NaN 的分析
- JS正則表達式字面量和使用new RegExp構(gòu)造函數(shù)創(chuàng)建的正則表達式有什么區(qū)別
- Javascript new關(guān)鍵字的玄機 以及其它
- Javascript new Date().valueOf()的作用與時間戳由來詳解
- javascript new一個對象的實質(zhì)
- JavaScript中的new的使用方法與注意事項
- js中獲取時間new Date()的全面介紹
- JavaScript初學(xué)者必看“new”
相關(guān)文章
前端實現(xiàn)Excel文件導(dǎo)出功能的完整代碼解析(vue實現(xiàn)excel文件導(dǎo)出)
在Vue中實現(xiàn)導(dǎo)出Excel文件有多種方式,可以通過前端實現(xiàn),也可以通過前后端配合實現(xiàn),下面這篇文章主要給大家介紹了關(guān)于前端實現(xiàn)Excel文件導(dǎo)出功能(vue實現(xiàn)excel文件導(dǎo)出)的相關(guān)資料,需要的朋友可以參考下2024-05-05
javascript 正則表達式相關(guān)應(yīng)介紹
javascript 中幾個與正則表達式相關(guān)的應(yīng)用,本文將詳細介紹,需要的朋友可以參考下2012-11-11

