基本的JavaScript问题:由于Java的情况没有硬限制(即IndexOutOfBoundsException),我们指定长度属性的声明的用途是什么?
var a = new Array(10);
Run Code Online (Sandbox Code Playgroud)
我知道它预定了长度并将"未定义"放入那些空白点.这个理由足够了吗?
cod*_*joe 41
声明阵列大小有许多明显的好处,但我认为大多数感知到的好处只是传递FUD.
性能更好!/它更快!
据我所知,预分配和动态分配之间的区别可以忽略不计.
更有趣的是,规范没有声明数组应该设置为预先分配的长度!
从第15.4.2.2节ECMA-262:
如果参数len是Number且ToUint32(len)等于len,则新构造的对象的length属性设置为ToUint32(len).如果参数len是Number且ToUint32(len)不等于len,则抛出RangeError异常.
这里有一个不科学的有趣测试案例:http://jsbin.com/izini
它使代码更容易理解!
就个人而言,我不同意.
考虑一下您过去编写的javascript,并考虑将来可能需要编写的代码.我无法想到我需要在其中一个数组上指定静态限制的时间.我还认为,在javascript中限制数组的潜在问题远远超过让人们知道你在想什么而没有实际检查所带来的好处.让权衡利弊......
优点:
缺点:
你也可以写:
//I assume this array will always be length 10
var arr = new Array();
Run Code Online (Sandbox Code Playgroud)
在上述情况下,评论可能更可取.明确的意图声明可以避免任何不习惯使用构造函数作为意图声明的混淆.
那好吧..为什么你认为它甚至在那里呢?
方便.当他们编写规范时,我认为他们实现了两件事.
所以他们把它放在那里.规范仅定义参数的使用,而不是如何实现.
Gab*_*cia 28
V8 JavaScript引擎的性能.
通过做:
var arr = []; arr.length = 1000;
Run Code Online (Sandbox Code Playgroud)
V8将为阵列预分配所需的内存,并维护/设置阵列Hidden Class为紧凑型SMI(小型Int,31位无符号)阵列.然而,当期望长度太大时,这不是真的,这导致HC被设置为稀疏阵列(即,映射).
请在Chrome上尝试以下链接:http://jsperf.com/0-fill-n-size-array
我已经包含了一个没有数组长度定义的额外测试用例,因此您可以了解实际的性能差异.
相关信息:http://www.youtube.com/watch?v = UJPdhx5zTaw
明晰.
在编写代码时,您的目标不是让计算机理解您,而是让下一个程序员读取您的代码以了解您.
var xs = new Array(10);
Run Code Online (Sandbox Code Playgroud)
上面的代码显示了你的意图:拥有一个10元素的数组.
var xs = [];
Run Code Online (Sandbox Code Playgroud)
上面没有任何结果; 没有额外的信息.
干杯.
我不确定,但我敢打赌,它会以较低的水平分配不同的内存.如果你知道你正在创建10,000个项目,那么只需保留那么多空间而不是动态地让它在后台一直调整大小.
| 归档时间: |
|
| 查看次数: |
53754 次 |
| 最近记录: |