相关疑难解决方法(0)

是否将某种JavaScript性能技巧归结为零?

查看jQuery核心,我发现了以下代码约定:

nth: function(elem, i, match){
    return match[3] - 0 === i;
},
Run Code Online (Sandbox Code Playgroud)

我对这个片段非常好奇 match[3] - 0

在Google上搜索"-0"并不是很有效率,搜索"减零"会返回对Bob Dylan歌曲的引用.

所以,谁能告诉我.这是某种性能技巧,还是有理由这样做而不是parseIntparseFloat

javascript jquery

18
推荐指数
4
解决办法
2251
查看次数

javascript函数和参数对象,是否涉及成本

在Web和框架中看到类似的代码是很常见的:

var args = Array.prototype.slice.call(arguments);
Run Code Online (Sandbox Code Playgroud)

在这样做时,您将参数Object转换为实数Array(尽管JS具有真正的数组),它允许您在Array原型中应用的任何数组方法等应用于它等.

我记得在某处读取arguments直接访问Object的速度明显慢于Array克隆,或者明显选择命名参数.是否有任何事实,在什么情况下/浏览器会导致性能损失?你知道的关于这个主题的任何文章?

http://bonsaiden.github.com/JavaScript-Garden/#function.arguments 更新有趣的发现,这使我之前阅读的内容无效...希望这个问题可以从写这篇文章的@Ivo Wetzel那里获得更多答案.

在该部分的底部,它说:

表现神话和真相

始终创建arguments对象,只有两个例外,即在函数内部或其形式参数之一声明它的名称.无论是否使用都无关紧要.

这与http://www.jspatterns.com/arguments-considered-harmful/冲突,其中指出:

但是,出于以下原因使用参数不是一个好主意:

  • 性能
  • 安全

每次调用函数时都不会自动创建arguments对象,JavaScript引擎只会按需创建它(如果使用的话).而且这种创造在性能方面并不是免费的.使用参数与不使用参数之间的差异可能会慢1.5到4倍,具体取决于浏览器

显然,不能两者都是正确的,那么它是哪一个呢?

ECMA顽固的Dmitrty Soshnikov说:

究竟"JavaScript引擎"是什么意思?你在哪里得到这个确切的信息?虽然,在某些实现中可能是正确的(是的,这是一个很好的优化,因为在解析代码时可以获得有关上下文的所有必需信息,因此如果在解析时找不到,则不需要创建参数对象),但是当你知道ECMA-262-3语句,每次进入执行上下文时都会创建参数对象.

javascript performance

18
推荐指数
1
解决办法
3636
查看次数

Javascript成语:if(x === + x)怎么办?

阅读underscore.js我的源代码,偶然发现了以下几行:

... if (obj.length === +obj.length) { ...
Run Code Online (Sandbox Code Playgroud)

这对我来说有点混乱.这里的实际比较是什么?我相信它有关于检测本机数组的一些事情,但无法弄清楚实际发生了什么.怎么+办?为什么用===而不是==?这种风格的性能优势是什么?

javascript arrays idioms triple-equals

4
推荐指数
1
解决办法
702
查看次数

标签 统计

javascript ×3

arrays ×1

idioms ×1

jquery ×1

performance ×1

triple-equals ×1