声明?你会用哪一个?
>使用创建新数组
- var new_list = new Array(); or - var new_list = []
>使用附加元素
>推(‘a’)
> new_list [i]; (如果我知道长度)
>三元运算符或if(){} else(){}
>尝试制作isodd功能,这更快
(!(is_even))或(x%2!= 0)
> foreach或正常迭代
多一个
> a = b = 3;或b = 3; A = B;
[编辑:我正在制作数学图书馆.所以任何表演黑客讨论也欢迎:)]
谢谢你的帮助.
解决方法
Anyhoo,只是看着快速的js引擎(所以Nitro,TraceMonkey和V8)
> []将比新阵列更快 – 新阵列变为以下逻辑
> cons = lookup属性“Array”,如果找不到,则抛出异常
>检查cons是否可以用作构造函数,如果不是:抛出异常
> thisVal = runtime直接创建一个新对象
> res =调用cons传递thisVal作为此值的结果 – 这需要逻辑来区分JS函数和标准运行时函数(假设标准运行时函数未在JS中实现,这是正常情况).在这种情况下,Array是一个本机构造函数,它将创建并返回一个新的运行时数组对象.
>如果res未定义或为null,则最终结果为thisVal,否则最终结果为res.在调用Array的情况下,将返回一个新的数组对象,并且将抛弃thisVal
[]告诉JS引擎直接创建一个新的运行时数组对象,没有额外的逻辑.这意味着新阵列具有大量额外(非常便宜)的逻辑,并执行和额外的不必要的对象分配.> newlist [newlist.length] = …更快(特别是如果newlist不是一个稀疏数组),但推送对我来说足够普遍,我希望引擎开发人员能够付出相当大的努力来提高性能,这样可能会改变及时.>如果你有一个足够紧的循环,三元运算符可能会有一个非常轻微的胜利,但可以说这是a = b的trival情况下的引擎缺陷? c:d vs if(b)a = c;否则a = d>仅仅单独的函数调用开销会使或多或少任何JS运算符的成本相形见绌,至少在理智的情况下(例如,您对数字而不是对象执行算术运算)> foreach语法尚未标准化,但其最终性能将取决于大量细节;通常,JS语义会导致高效的语句效率降低 – 例如. for(var i in array)…比for(var i = 0; i< array.length; i)慢得多......因为JS语义要求在枚举中建立一个包含所有属性的列表对象(包括原型链),然后在通过循环发送之前检查以确保每个属性仍然在对象上.哦,属性需要从整数(无论如何在数组的情况下)转换为字符串,这会耗费时间和内存.