Javascript——使用数字作为整数可靠吗?
为什么在Javascript中使用数字作为整数显然是安全的?我的意思是,像下面这样的循环通常是“可信的”,可以运行预期的次数,即使最后的循环需要精确比较(10000==10000),当这两个值是float而不是int时。是否有某种内置的舍入特性使其安全可靠?或者这种编码是可怕的、不可信的?谢谢 --编辑-- 有趣的是,有一个声明的安全整数范围。我不知道。我们都知道2+2=3.9999的标准呜呜声。我注意到MAX_SAFE_INTEGER列为ECMAScript-6,那么这是否意味着IEEE-754实际上没有提到安全整数范围Javascript——使用数字作为整数可靠吗?,javascript,numbers,integer,Javascript,Numbers,Integer,为什么在Javascript中使用数字作为整数显然是安全的?我的意思是,像下面这样的循环通常是“可信的”,可以运行预期的次数,即使最后的循环需要精确比较(10000==10000),当这两个值是float而不是int时。是否有某种内置的舍入特性使其安全可靠?或者这种编码是可怕的、不可信的?谢谢 --编辑-- 有趣的是,有一个声明的安全整数范围。我不知道。我们都知道2+2=3.9999的标准呜呜声。我注意到MAX_SAFE_INTEGER列为ECMAScript-6,那么这是否意味着IEEE-75
var cnt=0;
对于(var i=0;i首先,最终循环不要求两个值相等。只要求i
小于10000
其次,JavaScript中的Number
类型将整数值精确地上(下)到某一点。您可以访问Number.MAX\u SAFE\u integer
和Number.MIN\u SAFE\u integer
属性,查看浏览器/引擎的安全范围
如果要检查Number
的实例是否为整数,只需使用Number.isInteger()
方法即可
var i=10,e=document.getElementById('message');
if(编号:isInteger(i)){
e、 innerHTML=“i是一个整数”;
}否则{
e、 innerHTML=“i不是整数”;
}
IEEE-754双精度浮点数(JavaScript使用的那种)有一个非常大的范围,在这个范围内它们精确地表示整数,特别是-9007199254740991到9007199254740991。(这些值作为常量添加到JavaScript的
Number
函数中:和。)在这个范围之外,你确实可能会遇到麻烦
事实上,如果不是为了安全,这个循环永远不会结束:
var n,安全性;
安全系数=0;
用于(n=9007199254740990;n!=9007199254740999;++n){
如果(++safety===20){//n'之后很久应该匹配
log(“不得不爆发!”);
打破
}
snippet.log(“n=”+n);
}
请参阅:该循环保证是安全的。Number.MAX\u safe\u INTEGER;//9007199254740991
,不要忘记在JavaScript中使用==
表示相等,使用=
表示抽象equality@floor严格模式对JavaScript的数据类型没有任何影响(至少,我们在这里讨论的意义不是这样)@JeremyBanks是的,你说得对,我现在觉得自己很蠢。我发誓我在某个地方读到你可以在javascript中启用其他数据类型。我不确定我是否会确切地说它“保存整数值”--这让我想到了明显标记的值。整数支持是标准浮点可以准确表示一系列整数值这一事实的副作用。这与使用标准浮点的任何地方都会出现的行为相同。@JeremyBanks-将措辞改得更清楚。