最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js判斷是否為數(shù)組的函數(shù): isArray()

 更新時(shí)間:2011年10月30日 23:34:18   作者:  
像 Ajaxian,StackOverflow 等,搜一下,到處都在討論 isArray() 的實(shí)現(xiàn)。對(duì)于一切都是對(duì)象的 JavaScript 來(lái)說(shuō),確實(shí)有點(diǎn)麻煩
今天剛好在學(xué)習(xí)支付寶 JS 框架 base.js 。瞄了一下,實(shí)現(xiàn)是這樣的:
復(fù)制代碼 代碼如下:

if (value instanceof Array ||
(!(value instanceof Object) &&
(Object.prototype.toString.call((value)) == '[object Array]') ||
typeof value.length == 'number' &&
typeof value.splice != 'undefined' &&
typeof value.propertyIsEnumerable != 'undefined' &&
!value.propertyIsEnumerable('splice'))) {
return 'array';
}

怎么說(shuō)呢,亂。當(dāng)然,也可以說(shuō)是,“史上最全”,它確實(shí)使用了最主流的方法,只是把他們都寫(xiě)一起了而已。


像我們所知道的,用 instanceof 和 constructor 是最直接的、簡(jiǎn)單的方式:
復(fù)制代碼 代碼如下:

var arr = [];
arr instanceof Array; // true
arr.constructor == Array; //true

只是,由于在不同 iframe 中創(chuàng)建的 Array 并不共享 prototype。如果這樣用。麻煩就來(lái)了。那么,如果要應(yīng)用在框架中,這種方式肯定是行不通的。倒是,使用 Douglas Crockford 的填鴨式方法是可以解決這個(gè)問(wèn)題(《JavaScript 語(yǔ)言精粹》P61):

復(fù)制代碼 代碼如下:

var is_array = function(value) {
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};

不過(guò),是否還有更簡(jiǎn)單的方法呢?其實(shí),像我們自己用的,不就是了么?
復(fù)制代碼 代碼如下:
Object.prototype.toString.call(value) == '[object Array]'

上面這種寫(xiě)法,是 jQuery 正在使用的。目前,淘寶的 kissy 也是使用這種方式。難道這不是目前最簡(jiǎn)潔,而且最有效的方式么?個(gè)人感覺(jué)內(nèi)部框架寫(xiě)得有點(diǎn)累贅了。例行總結(jié),最終方案:
復(fù)制代碼 代碼如下:

var isArray = function(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
==============

UPDATE: 2010.12.31 00:01(出處)

判斷類型,很酷。具體的,跟上面是一個(gè)道理:
復(fù)制代碼 代碼如下:

var is = function (obj,type) {
return (type === "Null" && obj === null) ||
(type === "Undefined" && obj === void 0 ) ||
(type === "Number" && isFinite(obj)) ||
Object.prototype.toString.call(obj).slice(8,-1) === type;
}

相關(guān)文章

最新評(píng)論

灯塔市| 亳州市| 长子县| 宜阳县| 民县| 北票市| 东乡| 固原市| 敦化市| 永顺县| 泽州县| 香河县| 弥渡县| 伊川县| 徐闻县| 平顺县| 岱山县| 康乐县| 长武县| 通辽市| 永新县| 楚雄市| 英超| 鹰潭市| 合山市| 潞城市| 剑阁县| 石家庄市| 江达县| 惠安县| 台山市| 连州市| 慈利县| 雷州市| 玉龙| 卓尼县| 垦利县| 汾西县| 洞头县| 明星| 神池县|