国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 23:36:11
字體:
來源:轉載
供稿:網友
今天剛好在學習支付寶 JS 框架 base.js 。瞄了一下,實現是這樣的:
復制代碼 代碼如下:

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';
}

怎么說呢,亂。當然,也可以說是,“史上最全”,它確實使用了最主流的方法,只是把他們都寫一起了而已。


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

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

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

復制代碼 代碼如下:

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

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

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

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

UPDATE: 2010.12.31 00:01(出處)

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

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;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岐山县| 乌拉特中旗| 邵阳县| 绥德县| 沛县| 吴旗县| 丹阳市| 合山市| 剑川县| 文安县| 青浦区| 平山县| 正定县| 岳阳市| 时尚| 紫阳县| 营山县| 南漳县| 朝阳县| 香港| 克东县| 同德县| 翁源县| 祁连县| 锡林郭勒盟| 清徐县| 万州区| 北京市| 扎鲁特旗| 扶沟县| 大化| 辽阳县| 长宁区| 米林县| 铁岭县| 获嘉县| 常德市| 临漳县| 安国市| 土默特右旗| 万山特区|