首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >闭包编译器- a++ >= 3能变成++a >3吗?

闭包编译器- a++ >= 3能变成++a >3吗?
EN

Stack Overflow用户
提问于 2011-04-09 19:05:36
回答 2查看 224关注 0票数 5

我承认,我问了一个问题,为什么闭包编译器不缩短几天前看起来可以缩短的代码,但这个原因在这种情况下是不适用的,我也不知道为什么这里不缩短它。

我的代码是:

代码语言:javascript
运行
复制
var a = 0;
function b() {
    return a++ >= 3;
}

现在有前增量和后增量。区别在于返回值-- a++返回a,然后递增,++a首先递增a,然后返回a

归根结底,我的代码可以缩短为(忽略空格删除):

代码语言:javascript
运行
复制
var a = 0;
function b() {
    return ++a > 3;
}

然而,闭包编译器似乎没有改变(或认识到)这一点。

因此,我的问题是:当使用++a >而不是a++ >=时,会产生什么副作用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-09 19:57:41

对于这个构造有一个特殊的边缘情况(但不是3)。

这是因为JavaScript将数字存储为IEEE-754浮点64位双倍,并且“只有”有保证的“精确”整数表示,最多可达2^53 (虽然实现可能具有更高的范围,但我不知道)。

这是Firefox 4上的内容:

代码语言:javascript
运行
复制
a = 2e53
a++ >= 2e53 // true

a = 2e53
++a > 2e53 // false

真正的问题是,这样一个非常特殊的转化会有什么实际收益?:-0

编码愉快。

票数 7
EN

Stack Overflow用户

发布于 2011-04-09 19:54:24

为什么不自己检查所有的边缘条件呢?

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5607180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档