442

两者有什么区别?

所以我知道这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
4

10 回答 10

596

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

始终使用长度属性

有一个库或脚本将 size 方法添加到数组原型,因为这不是本机数组方法。这通常是为了添加对自定义 getter 的支持。使用它的一个例子是当你想获得一个数组的内存大小时(这是我能想到的唯一对这个名字有用的东西)。

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

于 2013-01-07T19:32:16.270 回答
172

.size()不是Array(至少在我知道的任何浏览器中都没有)的本机 JS 功能。

.length 应该使用。


如果

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

或者

您的浏览器上可能有一些插件与Array原型不符。

于 2013-01-07T19:23:23.697 回答
34

.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属性。

于 2016-05-25T13:44:10.393 回答
21

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

如果你已经导入了jQuery并且你会写 like $(array).size(),它会返回数组长度。

于 2013-07-24T20:07:57.207 回答
17

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

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

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

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

更多信息

于 2017-06-19T10:02:16.357 回答
9

属性 '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 );
于 2018-11-14T08:59:09.887 回答
3

.size() 方法从 jQuery 1.8 开始被弃用。改用 .length 属性

见:https ://api.jquery.com/size/

于 2018-07-21T12:10:11.083 回答
2

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

const set1 = new Set([1, 2, 3, 4, 5, 5, 5, 6]);
console.log(set1.size);
// expected output: 6
于 2019-06-15T14:57:24.397 回答
1

其实.size()不是纯 JavaScript 方法,Set.size对象有个 accessor 属性,有点像但不是函数方法,就像我说的,它是一个 Set 对象的 accessor 属性,用来显示唯一的个数Set 对象中的(唯一)元素。.size()

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

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

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

console.log(clothing.length);
// expected output: 4
于 2020-03-16T07:42:15.607 回答
1

我们可以使用.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) ;`
于 2020-03-26T18:04:05.607 回答