只是,由於在不同 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;
}