js判断是否为数组的函数

我们常用的datearray.constructor==Array来判断

 代码如下 复制代码

<script language="javascript">
var ret = false;
var datearray = Array();
if( datearray.constructor==Array )
{
 alert('是数组');
}
else
{
 alert("不是数组");
}
</script>

今天刚好在学习支付宝 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;
}

时间: 2024-10-27 21:18:26

js判断是否为数组的函数的相关文章

js判断是否为数组的函数: isArray()_javascript技巧

今天刚好在学习支付宝 JS 框架 base.js .瞄了一下,实现是这样的: 复制代码 代码如下: if (value instanceof Array || (!(value instanceof Object) && (Object.prototype.toString.call((value)) == '[object Array]') || typeof value.length == 'number' && typeof value.splice != 'unde

js判断是否是数组及常见类型判断

 前言   本篇是基础知识普及篇,js判断数据类型等.我们都知道,php中有is_array()函数,但是js中没有,我们判断数据类型是否是数组的时候,通常保险起见,可以写个函数进行判断.今天呢,普及一些基本的数据类型判断方法,希望对大家有所帮助.   typeof篇   typeof用的比较多的时候,是判断某个全局变量在不在,假如某个页面定义了一个全局变量.假如你做如下判断:   //haorooms是全局变量 if(haorooms!=undefined){ }//js会报错,说"Uncau

js中判断是否为数组的函数

 代码如下 复制代码 <script language="javascript"> var ret = false; var datearray = Array(); if( datearray.constructor==Array ) {  alert('是数组'); } else {  alert("不是数组"); } </script>  代码如下 复制代码 constructor 属性返回对创建此对象的数组函数的引用.

js 判断是否为数组详解

判断javascript数组的方法    代码如下 复制代码 var is_array=function(){    return value &&        typeof value==='object' &&        value.constructor===Array;  }  我们知道,javascript是一种弱类型的语言,并且,javascript中的一切实质上都是对象.那么,在javascript中如何进行对象的类型检查将是一个非常重要的话题. 这里,

JavaScript中判断变量是数组、函数或是对象类型的方法_javascript技巧

数组      ECMAScript5中Array.isArray是原生的判断数组的方法,IE9及以上支持.考虑到兼容性,在没有此方法的浏览器中,可以使用 Object.prototype.toString.call(obj) === '[object Array]'替代. 复制代码 代码如下: var isArray = Array.isArray || function(obj) {     return Object.prototype.toString.call(obj) === '[o

js判断select列表值的函数

//1.判断select选项中 是否存在Value="paraValue"的Itemfunction jsSelectIsExitItem(objSelect,objItemValue){     var isExit = false;     for(var i=0;i<objSelect.options.length;i++)     {         if(objSelect.options[i].value == objItemValue)         {     

js判断数据类型如判断是否为数组是否为字符串等等

 js判断数据类型如判断是否为数组类型.判断是否为字符串类型.判断是否为数值类型等等,本文有几个不错的示例,大家可以学习下 1 判断是否为数组类型  2 判断是否为字符串类型  3 判断是否为数值类型  4 判断是否为日期类型  5 判断是否为函数  6 判断是否为对象    1 判断是否为数组类型   代码如下: <script type="text/javascript">  //<![CDATA[  var a=[0];  document.write(isAr

JS判断元素是否在数组内的实现代码_javascript技巧

一.JQuery 如果是用JQuery的话,可以用inArray()函数: jquery inarray()函数详解 jquery.inarray(value,array) 确定第一个参数在数组中的位置(如果没有找到则返回 -1 ). determine the index of the first parameter in the array (-1 if not found). 返回值 jquery 参数 value (any) : 用于在数组中查找是否存在 array (array) :

js打印数组的函数范例

在js中,不像php那样拥有自带的print_r().var_dump()打印数组的函数.为了方便日常调试,我们可以自己写一个打印的函数出来,就像php那样的. 实现不难,主要运用循环去遍历数组,同时运用Object.prototype.toString.call去判断如果元素仍是数组,则递归执行.   以下为打印的效果图,可以选择用alert打印,也可以选择用console.log打印到控制台.打印出来的效果跟php中的print_r比较像.     效果1     可以打印到控制台   效果