如果我是一个虚拟机,在执行JavaScript时我会如何处理数字
If I was a VM how would I treat numbers when executing JavaScript?
我一直在思考如何最好地弥合CLR世界(.NET运行时)和JavaScript之间的差距,我想到的一件事是JavaScript中类型的概念,它在某种程度上是从用法中推断出来的,而C#不需要这样做。
我想了解更多关于JavaScript引擎的实现细节,特别是关于如何处理数字。该标准概述了一系列在特定上下文中有效并产生特定结果的运算。严格来说,JavaScript中不存在整数的概念,但有一些典型的整数算术运算,如位移(>>
),它们总是对32位有符号整数进行运算,并总是产生32位有号整数。
我想最困难的部分是弄清楚一个数字何时是整数,何时不是整数。但是虚拟机是如何做到这一点的呢?
var x = 1; // is this an integer or a double?
var x = 1.0; // is this an integer or a double?
var x = 2147483648; // is this an integer or a double?
var x = 9007199254740993; // is this an integer, double or runtime error?
我猜这里面有很多启发法。我特别在寻找一些潜在的主题,可以用来更好地解释这些事情。
此外,从性能的角度来看,如果您意识到某些数字被用作整数,那么您绝对可以通过坚持整数来优化这些情况。不过,你怎么知道什么时候该这么做?
有任何JavaScript虚拟机大师想尝试一下吗?(在这一点上,我对VM的内部比对规范的实际细节更感兴趣)
如果您想深入了解JavaScript实现如何处理Number
类型的细节,那么没有什么比访问源代码更好的了。我会看:
- V8源代码(V8是谷歌的JavaScript引擎,用于Chrome、NodeJS和其他一些地方。是速度最快的引擎之一。)
- SpiderMonkey源代码(SpiderMonkeyMozilla的引擎,在Firefox中使用)
相关文章:
- 我怎样才能以非阻塞的方式处理数字
- 如何使用if语句jquery对数字进行动画处理
- 文本框中的数字需要处理
- 如何处理 jQuery 中的数字输入更改
- 这个最终数字从何而来
- 如何在JavaScript上处理金融应用程序的数字,它缺少整数类型
- 当 ng 模型输入为数字时,处理它
- 修改地板/天花板功能以处理 1 以外的数字
- 通过 AngularJS 处理 Firefox 中的数字输入
- 如何在Javascript中处理大于2^53的数字
- 以何种格式记录/存储数字数据以供进一步的JavaScript处理
- 应用斐波那契,处理大数字
- Javascript缩小和模糊处理更改了代码中的数字
- 使用数字id javascript处理html输入元素
- AngularJS处理格式化的数字输入
- RegEx在VBA和JavaScript中的处理方式有何不同?
- 在javascript中处理字符串、数字或两者时应该使用什么排序算法
- Javascript数字比较操作符是如何处理字符串的
- 报告服务-SSRS中的Javascript没有正确处理数字符号
- 如果我是一个虚拟机,在执行JavaScript时我会如何处理数字