Array.size() 与 Array.length

IT技术 javascript arrays
2021-03-02 16:17:18

两者有什么区别?

所以我知道这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
6个回答

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

始终使用长度属性

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

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

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

.length 应该使用。


如果

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

或者

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

@BartFriederichs 好吧,我在 Chrome 中,但很高兴知道 :-D
2021-04-23 16:17:18
如果它在 Chrome 中适合您,那么您可能在页面上调用了一些额外的库,将其添加到 Array 原型中。
2021-04-27 16:17:18
@AbrahamP,在此页面上按 F12,然后[].size在控制台中输入。如果它有效,那么你有某种 Chrome 插件与 Array 原型混淆,我会担心。:)
2021-05-05 16:17:18
它在 Chrome 中工作,在 Firefox 中不起作用,我倾向于使用 Chrome 进行调试,所以它似乎可以工作。感谢您指出它不存在。
2021-05-15 16:17:18
版本 23.0.1271.97 [].size function size(){return this.length;} 所以实际上它只是围绕 .length 的一个包装......我现在有点觉得愚蠢......
2021-05-20 16:17:18

.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 对于带有字符串键的数组,例如pbook上面的,您可以使用$(pbook).size();[requires jQuery]
2021-04-26 16:17:18
不过,为什么要在各处放置两​​个空格?
2021-04-26 16:17:18
如果大小不起作用,是否有一些可以与字符串一起使用的东西?
2021-05-16 16:17:18

.size() 是 jQuery 的,很可能你要么混淆了其他人,要么从其他人那里获取了 jQuery 库到他的项目。

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

许多库使用.size()它不仅是jquery
2021-04-20 16:17:18

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

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

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

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

更多信息

另一方面, array.length 不一定是数组定义(未分配)值的数量
2021-05-01 16:17:18
它正是数组中的项目数。这些项目是否未定义取决于程序员,而不是 JS。
2021-05-04 16:17:18
在实践中,它是项目的数量。大多数 JS 解释器会用 undefined 填充数组行。在您的示例中,您的数组中有 101 个元素,其中 97 个元素没有值(未定义)但元素在那里。它看起来像: ['car1', 'car2', 'car3', undefined * 97, 'car100'] 如果你在这个数组上循环,你的增量变量在循环后的值为 101。
2021-05-07 16:17:18