javascript 的数字,内部表示可以是标准的 32 位整型,而不是浮点数吗?

2021-06-07 16:26:44 +08:00
 3dwelcome

好几年前学 javascript 的时候,网上都说 js 内部数字表达方式就一种,用浮点来表示。

然而我看了 google 的代码后,对这个观点,表示强烈怀疑。

这是 google 的代码库:https://github.com/google/closure-library/blob/master/closure/goog/math/long.js

开头明确写着是 32 位整型:

this.low_ = low | 0; // force into 32 signed bits.

this.high_ = high | 0; // force into 32 signed bits.

我又去翻了一下各种资料,顺藤摸瓜,又找到了类似的文章:

JS 类型声明有固定写法,变量 | 0 表示整数,+变量表示浮点数。

var a = 1;

var x = a | 0;  // x 是 32 位整数
var y = +a;  // y 是 64 位浮点数

上面代码中,变量 x 声明为整数,y 声明为浮点数。支持 asm.js 的引擎一看到 x = a | 0,就知道 x 是整数,然后采用 asm.js 的机制处理。如果引擎不支持 asm.js 也没关系,这段代码照样可以运行,最后得到的还是同样的结果。

再看下面的例子。

// 写法一
var first = 5;
var second = first;

// 写法二
var first = 5;
var second = first | 0;

上面代码中,写法一是普通的 JavaScript,变量 second 只有在运行时才能知道类型,这样就很慢了,写法二是优化 js,second 在声明时就知道是整数,速度就提高了。

也许那么多年,chrome 内核早就对 js 运行期做了一定智能优化,再也不是傻傻的无类型语言了。感叹 JS 还真是在不断进化中。

2916 次点击
所在节点    JavaScript
22 条回复
no1xsyzy
2021-06-08 09:56:20 +08:00
随手试了下 IE,发现根本找不到(
谁能告诉我 Cheat Engine 怎么找 IE 的内存?
no1xsyzy
2021-06-08 10:10:38 +08:00
哦,找到了
IE 似乎确实是两层指针的


但如果是 Double 且足够大了以后又是原位赋值了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/781924

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX