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); |
将打印:
- 您在本地javascript中哪里找到了Array.size()方法?
- 铬没有.size…
- 公平地说,只是尝试将两者都插入Firebug,而.size()不起作用。它在Chrome的控制台上看起来确实工作正常…
- @Abrahamp IDK您正在使用什么Chrome控制台…
- @Abrahamp你在控制台上做.size()的时候在哪个网页上?我假设那个页面使用了Array的原型。
- 运行代码后我的Chrome控制台的屏幕截图
- .size()可能来自原型框架:prototypejs.org/doc/latest/language/array/prototype/size
- 为什么这个问题有这么多的赞成票,当OP最有可能有原型或其他框架,添加了size()方法到Array时。我个人认为这会误导新读者。答案不能直接解决问题。考虑修改或删除问题?
- @守护进程我想这个页面很不错,因为它是谷歌搜索"如何用javascript获取数组大小"的快速答案。除此之外,我同意
array.size()不是有效的方法
始终使用长度属性
有一个库或脚本正在将大小方法添加到数组原型中,因为这不是本机数组方法。这通常是为了添加对自定义getter的支持。使用这个的一个例子是,当您想要在一个数组的内存中获得大小时(这是我唯一能想到的对这个名称有用的事情)。
不幸的是,js定义了一个size方法,它实际返回对象或数组的长度。由于不幸的是,函数的length属性被定义为命名参数的数量,因此函数声明必须使用可选参数,并选择了size(count是更好的选择)。
.size()不是Array的本地JS函数(至少在我所知道的任何浏览器中都不是)。
应使用.length。
如果
.size()确实在您的页面上工作,请确保您没有包含任何额外的库,例如与Array原型发生冲突的原型库。
或
您的浏览器上可能有一些插件与Array原型发生冲突。
- 也不在火狐中。
- @巴弗里德里克斯,我是铬合金的,但这是很好的了解。
- 它在Chrome中工作,在Firefox中不工作,我倾向于使用Chrome来满足调试需求,所以它似乎可以工作。感谢您指出它不存在。
- 不在任何浏览器中。
- @我不知道你用的是什么铬合金,但对我来说,这在铬合金中根本不起作用!
- 如果它在Chrome中对您有效,那么您可能会在页面上调用一些额外的库,将其添加到数组原型中。
- @阿布拉汉普^^^^^^
- 版本23.0.1271.97[]。我现在有点笨…
- 我穿铬合金的不管用。
- 23.0.1271.97M版的Chrome在试图在数组上使用.size()时报告TypeError: Object 1,2,3,4,5 has no method 'size'。
- 我也用了23.0.1271.97的铬。那是不存在的。
- @我有和你一样的版本,但我没有尺寸。确保您没有在某个地方包含一些随机库…
- @Abrahamp,点击本页的F12,在控制台中输入[].size。如果它能正常工作,那么你有一些Chrome插件在破坏数组原型,我会担心的。:)
- @阿奎那,这可能就是发生的事情…
- 这只是我在翻阅的那一页(旋转木马)。感谢所有的回复!
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属性。
- 如果大小不起作用,是否有一些东西可以处理字符串?
- @chris对于带有字符串键的数组,如上面的pbook,可以使用$(pbook).size();〔需要jquery〕。
- 不过,你为什么要在每个地方放两个空格呢?
.size()是jquery的,很可能您对其他将jquery库导入到其项目的人感到困惑,或者从其他人那里获取。
如果您导入了jquery,并且写得像$(array).size(),它将返回数组长度。
- 许多图书馆使用.size(),它不仅是jquery
array.length不一定是数组中的项数:
1 2 3
| var a = ['car1', 'car2', 'car3'];
a[100] = 'car100';
a.length; // 101 |
数组的长度比最高索引多一个。
如前所述,Array.size()不是有效的方法。
更多信息
- 实际上是项目的数量。大多数JS解释器将使用未定义的数组行填充数组行。在您的示例中,数组中有101个元素,其中97个元素没有值(未定义),但元素存在。它看起来像是:['car1'、'car2'、'car3'、undefined*97'、'car100']如果您在这个数组上循环,您的增量变量将在循环之后值101。
- 另一方面,array.length不一定是数组中已定义(未分配)的值的数目。
从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 ); |
- 虽然这是一个有趣的答案,但我不完全确定它是否是这个问题的答案。
- 操作询问"array.size()vs array.length"。从前面的讨论中可以清楚地看到,"大小"函数不是标准JavaScript的一部分,而是由库实现的。所以我假设操作人员对如何检索JavaScript数组的实际长度感兴趣。我发现了一个鲜为人知的javascript"特性",它会导致意外的行为,特别是当数组包含其他类型的对象(例如字符串)时,行为会有所不同。