好几年前学 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 还真是在不断进化中。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.