aal*_*ous 15 javascript string performance
我对JS很新,并且认识到长度被视为属性.但我收到一条评论,不在循环中使用str.length:
for (i=0; i<str.length; i++){...}
VS
var len = str.length;
for (i=0; i<len; i++){...}
Run Code Online (Sandbox Code Playgroud)
现在,我知道str.length()是Java中的常量时间操作,因为长度存储为String类中的字段.但话说回来,字符串在Java中是不可变的.我不确定JS字符串.str.length是否也保证了JS中的常量时间?无法在网络的任何地方找到这个.
mač*_*ček 13
字符串在JavaScript中也是不可变的.length每次访问该属性时都不需要计算该属性.
我为你创建了一个jsperf基准测试.
你会注意到速度是一样的.
str.lengthJS 也能保证恒定时间吗?
不,事实上 JavaScript 中没有任何运行时性能或复杂性保证。
然而,是的,可以预期它可以在恒定时间内访问,而无需对访问进行动态线性时间长度计算。ECMAScript 规范还将String.length属性描述为不可变的,并且在构造字符串时对其进行初始化。