关于javascript:Array.size()vs Array.length

Array.size() vs Array.length

这两者有什么区别?

所以我知道array.size()是一个函数,而array.length是一个属性。有没有一个使用一个而另一个的用例?一个更有效吗?(我认为.length会更快,因为它是一个属性,而不是方法调用?)为什么要使用较慢的选项?有没有一些浏览器不兼容?

1
2
3
4
5
6
7
8
  var x = [];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);
  x =[1,2,3];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);

将打印:

1
2
  0, 0, true
  3, 3, true


array.size()不是有效的方法

始终使用长度属性

有一个库或脚本正在将大小方法添加到数组原型中,因为这不是本机数组方法。这通常是为了添加对自定义getter的支持。使用这个的一个例子是,当您想要在一个数组的内存中获得大小时(这是我唯一能想到的对这个名称有用的事情)。

不幸的是,js定义了一个size方法,它实际返回对象或数组的长度。由于不幸的是,函数的length属性被定义为命名参数的数量,因此函数声明必须使用可选参数,并选择了size(count是更好的选择)。


.size()不是Array的本地JS函数(至少在我所知道的任何浏览器中都不是)。

应使用.length

如果

.size()确实在您的页面上工作,请确保您没有包含任何额外的库,例如与Array原型发生冲突的原型库。

您的浏览器上可能有一些插件与Array原型发生冲突。


jquery和许多其他库中都提供了.size()函数。

.length属性仅在索引为整数时工作。

length属性将与此类型的数组一起使用:

1
2
3
4
var nums = new Array();
nums[0] = 1;
nums[1] = 2;
print(nums.length); // displays 2

length属性不适用于这种类型的数组:

1
2
3
4
var pbook = new Array();
pbook["David"] = 1;
pbook["Jennifer"] = 2;
print(pbook.length); // displays 0

因此,在您的情况下,您应该使用.length属性。


.size()是jquery的,很可能您对其他将jquery库导入到其项目的人感到困惑,或者从其他人那里获取。

如果您导入了jquery,并且写得像$(array).size(),它将返回数组长度。


array.length不一定是数组中的项数:

1
2
3
var a = ['car1', 'car2', 'car3'];
a[100] = 'car100';
a.length; // 101

数组的长度比最高索引多一个。

如前所述,Array.size()不是有效的方法。

更多信息


从jquery 1.8开始,不推荐使用.size()方法。改用.length属性

请参阅:https://api.jquery.com/size/


属性"length"返回带有数字键的数组的(最后一个键+1):

1
2
3
4
var  nums  =  new  Array ();
nums [ 10 ]  =  10 ;
nums [ 11 ]  =  11 ;
log.info( nums.length );

将打印12!

这将起作用:

1
2
3
4
5
var  nums  =  new  Array ();
nums [ 10 ]  =  10 ;
nums [ 11 ]  =  11 ;
nums [ 12 ]  =  12 ;
log.info( nums.length + '  /  '+ Object.keys(nums).length );