Q1.Javascript怎么得到数组长度(也就是数组的元素个数)? Q2.Javascript怎么获取对象的成员个数? Q1 你肯定想到了array.length!? 那么我们来测试一下下面这个例子. <script type="text/javascript"> var a = []; a[50] = 50; alert(a.length); </script> 请问数组a有多少个元素, 或者换一句话说, 数组a的长度为多少? 你会告诉我长度为1, 但浏览器会告诉你a.length为51. 有点意思吧? //其实也好理解, 类比于PHP中的索引数组, 一切根据key的变化而定。 那我们再看一个例子.
<script type="text/javascript"> var a = []; a['age'] = '18'; a['sex'] = 'Male'; a['site'] = 'http://www.qSyz.net'; alert(a.length); </script>
请问数组a有多少个元素, 或者换一句话说, 数组a的长度为多少? 我们都知道现在数组a的元素个数为3个,但浏览器会告诉你a.length为0 !! 备注:undefined 和null ,与空位是不同的概念~~ Q2 js怎么获取对象的成员个数? 用length属性吗?
<script type="text/javascript">
var a = {'age':30,'sex':'male'};
alert(a.length);
</script>
以上代码得到结果为undefined! 综上所述, length不可靠, 要想准确获取js数组元素个数或者对象的成员个数, 我们需要自己动手写一个函数. 备注: 数组 如果不是通过[key]修改的, 而是直接声明初始化赋值/或者使用push, pop修改, 是可以使用的. 如下: 统一解决办法: 自定义函数, 但是有时候可能大材小用[数据类型确定, 就针对一种写解决方法即可] 如果传入数组则计算数组长度, 如果传入对象则计算对象成员数, 如果传入字符串则计算字符串的字数, 其他类型返回false 备注: 字符串与数组的相似性仅此而已。实际上,无法改变字符串之中的单个字符, length 属性返回字符串的长度,该属性也是无法改变的。 所以可以字符串可以使用length属性来取值
<script type="text/javascript">
//方式一
function count(o){ var t = typeof o; if(t == 'string'){ return o.length; }else if(t == 'object'){ var n = 0; for(var i in o){ n++; } return n; } return false; }
// 方式二:
function countTwo(value){ var type = typeof value; if(type == 'string'){ return value.length; }else if(type == 'object'){ var type = value instanceof Array; //或者直接通过value.filter来检测判断亦可, 数组有该方法, 对象没有 if(type){ return value.filter(function(ele){ return !!ele || ele == 0; }).length; } return Object.getOwnPropertyNames(value).length; } return false; }
</script>
现在在测试一下刚才的例子?
<script type="text/javascript">
var a = [];
a[50] = 50;
alert(count(a));
</script>
得到结果为2
<script type="text/javascript">
var a = [];
a['age'] = '18';
a['sex'] = 'Male'; a['site'] = 'http://www.qSyz.net';
alert(count(a));
</script>
得到结果为3.
<script type="text/javascript"> var a = {'age':30,'sex':'male'};
alert(count(a));
</script>
得到结果为2 补充
如果是数组, 可以使用
var arr = [0, 1, 50];
var count = arr.filter(function(a) {
return !!a; //注意判断条件
}).length;
但是: 因为有个元素为0 , 获取的长度为2, 所以要留心判断条件
后续补充 ... |