我承认,我问了一个问题,为什么闭包编译器不缩短几天前看起来可以缩短的代码,但这个原因在这种情况下是不适用的,我也不知道为什么这里不缩短它。
我的代码是:
var a = 0;
function b() {
return a++ >= 3;
}
现在有前增量和后增量。区别在于返回值-- a++
返回a
,然后递增,++a
首先递增a
,然后返回a
。
归根结底,我的代码可以缩短为(忽略空格删除):
var a = 0;
function b() {
return ++a > 3;
}
然而,闭包编译器似乎没有改变(或认识到)这一点。
因此,我的问题是:当使用++a >
而不是a++ >=
时,会产生什么副作用?
发布于 2011-04-09 19:57:41
对于这个构造有一个特殊的边缘情况(但不是3)。
这是因为JavaScript将数字存储为IEEE-754浮点64位双倍,并且“只有”有保证的“精确”整数表示,最多可达2^53 (虽然实现可能具有更高的范围,但我不知道)。
这是Firefox 4上的内容:
a = 2e53
a++ >= 2e53 // true
a = 2e53
++a > 2e53 // false
真正的问题是,这样一个非常特殊的转化会有什么实际收益?:-0
编码愉快。
发布于 2011-04-09 19:54:24
为什么不自己检查所有的边缘条件呢?
function b(a) {
return a++ >= 3;
}
function b2(a) {
return ++a > 3;
}
console.log(b(2) === b2(2))
console.log(b(3) === b2(3))
console.log(b(4) === b2(4))
在每种情况下,输出都是true
。
https://stackoverflow.com/questions/5607180
复制相似问题