js 数组长度

当 js 数组 key 有一个为数值时,这个数组的长度将是最大 key + 1。如下:

<script type="text/javascript">
var a = []; 
a[10] = 1; 
a[109] = 2; 
console.log(a.length); // 110
a["abc"] = 1; 
console.log(a.length); // 110
</script>

当 js 数组 key 都为字符串时,这个数组的长度的长度为 0。如下:

<script type="text/javascript">
var a = []; 
a["abc"] = 1; 
console.log(a.length); // 0
</script>

如果不知道这个区别,那么我们在使用 for 循环时可能会遇到麻烦,如下:

<script type="text/javascript">
var a = []; 
a[10000000] = "abc";
var start = new Date().getTime(), len = a.length, j=0;
for(var i=0; i<a.length;i++){j++;}
var end = new Date().getTime();
console.log(end - start); // 146
</script>
<script type="text/javascript">
var a = []; 
a[10000000] = "abc";
var start = new Date().getTime(), len = a.length, j=0;
for(var i in a){j++;}
var end = new Date().getTime();
console.log(end - start); // 0
</script>

上面两段分别是检测对于同一个数组,使用 for 与 for in 的执行效率。使用 for 需要 146毫秒,而使用 for in 瞬间完成。这时就体现出 for in 的优势来了。 

还有一点就是对于数值 key 加不加引号都为理解为 数值。

为什么会有这样的疑惑,那就是因为PHP 不是这样的。如下:

<?php
 $a[100] = 123;
 $a["abc"] = 333;

 echo count($a); // 2

对于 Java等强类型语言就不会有这个问题,定义时必须指定长度~~。共勉之~

16
Mar 2015
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments