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等强类型语言就不会有这个问题,定义时必须指定长度~~。共勉之~