Array.size()与Array.length


384

两者有什么区别?

所以我知道那array.size()是一个函数,而又array.length是一个属性。是否有一个使用案例?有效率吗?(我想.length它会更快,因为它是属性而不是方法调用?)为什么有人会使用较慢的选项?是否存在某些与另一浏览器不兼容的浏览器?

  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);

将打印:

  0, 0, true
  3, 3, true

63
您在哪里找到Array.size()了本机JavaScript中的方法?
2013年

2
Chrome没有.size...
0x499602D2 2013年

1
@AbrahamP idk您正在使用什么Chrome控制台...
Naftali又名Neal,


Answers:


534

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

始终使用length属性

有一个库或脚本将size方法添加到数组原型中,因为这不是本机数组方法。通常这样做是为了添加对自定义getter的支持。例如,当您想获取数组内存中的大小时(这是我唯一想到的,此名称对该名称很有用)。

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


153

.size()不是土生土长JS功能Array(至少不会在任何浏览器,我知道的)。

.length 应该使用。


如果

.size() 确实可以在您的页面正常工作,请确保您没有包含任何其他库,例如与原型无关的Array原型。

要么

您的浏览器上可能有一些与Array原型混为一谈的插件。


@BartFriederichs好吧,我在Chrome浏览器中,但是很高兴知道:-D
Naftali又名Neal,

它确实可以在Chrome中工作,而不能在Firefox中工作,我倾向于将Chrome用于调试需求,因此它似乎可以工作。感谢您指出其不存在。
亚伯拉罕·P

9
如果它在Chrome中适合您,则您可能在页面上调用了一些额外的库,将其添加到Array原型中。
秒杀威廉姆斯

1
版本23.0.1271.97 [] .size函数size(){返回this.length;}实际上,它只是.length的包装...我现在有点愚蠢...
Abraham P

2
@AbrahamP,在此页面上按F12,然后[].size在控制台中键入。如果可行,那么您有某种Chrome插件正在与Array原型混为一谈,我会担心。:)
aquinas

30

.size()功能在Jquery和许多其他库中可用。

.length属性仅在索引为整数时有效。

length属性与以下类型的数组一起使用:

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

length属性适用于此类型的数组:

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

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


如果大小不起作用,是否有一些可以与字符串配合使用的东西?
克里斯(Chris)

2
@Chris用于带有字符串键的数组,例如pbook上面的数组,您可以使用$(pbook).size();[requires jQuery]
讨厌的馅饼

3
但是,为什么还要在各处放置两​​个空格?
发布自我


15

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

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

数组的长度比最高索引大一倍。

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

更多信息


实际上,它是项目的数量。大多数JS解释器都会用未定义的值填充数组行。在您的示例中,您的数组中将有101个元素,其中有97个无值的元素(未定义),但有元素。它看起来像:['car1','car2','car3',undefined * 97,'car100']如果在此数组上循环,则循环后增量变量的值为101。
ElJackiste '18

另一方面,array.length不一定是数组中已定义(未分配)值的数量。
ElJackiste '18

4

属性'length'返回具有数字键的数组的(last_key + 1):

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

将打印12!

这将起作用:

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

尽管这是一个有趣的答案,但我不确定是这个问题的答案
OliverRadini

OP正在询问“ Array.size()与Array.length”。从前面的讨论中可以清楚地看出,“大小”功能不是标准JavaScript的一部分,而是由库实现的。因此,我假设OP对如何检索JavaScript数组的实际长度感兴趣。我发现了一个鲜为人知的JavaScript“功能”,它可能导致意外的行为,尤其是当数组包含其他类型的对象(例如字符串)时,行为会有所不同。
cskwg


2

大小检测到重复项,它将返回唯一值的数量

const set1 = new Set([1, 2, 3, 4, 5, 5, 5, 6]);
console.log(set1.size);
// expected output: 6

1

其实,.size()是不是纯JavaScript方法,有一个访问属性.size设置是有点像的对象.size(),但它不是一个功能的方法,正如我所说的,它是一组对象的访问属性来显示的唯一编号Set对象中的(唯一)元素。

size访问器属性返回Set对象中(唯一)元素的数量。

const set1 = new Set();
const object1 = new Object();

set1.add(42);
set1.add('forty two');
set1.add('forty two');
set1.add(object1);

console.log(set1.size);
// expected output: 3

并且length是可迭代对象(数组)的属性,该对象返回该数组中的元素数。该值是一个无符号的32位整数,在数值上总是大于数组中的最高索引。

const clothing = ['shoes', 'shirts', 'socks', 'sweaters'];

console.log(clothing.length);
// expected output: 4

0

我们可以使用.length属性设置或返回数组中的元素数。返回值是一个数字

> set the length: let count = myArray.length;
> return lengthof an array : myArray.length

如果需要过滤重复值并获取集合中元素的数量,我们可以.size。

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.