JavaScript编号

时间:2011-10-25 21:37:03

标签: javascript

我在MDN Reintroduction to JavaScript上读到JavaScript编号只是一个浮点精度类型,并且JavaScript中没有整数。然而,JavaScript有两个函数,parseInt和parseFloat`。在做了一些谷歌搜索后,我的结果好坏参半。

那么,JavaScript是否在数字类型中抽象出整数和双精度的细节,或者JavaScript只有双精度数字类型而且函数parseIntparseFloat命名不佳?

6 个答案:

答案 0 :(得分:8)

  

JavaScript是否在数字类型中抽象出整数和双精度的细节,或者JavaScript只有双精度数字类型

JS引擎可能选择优化Number的一些用途以在幕后使用整数数学,但就JS应用而言,只有Number,它总是表现得像一个IEEE双精度浮点数。

  

并且函数parseInt和parseFloat命名不佳?

可以说,parseFloatThatHappensToBeAWholeNumber会有点笨拙。 : - )

答案 1 :(得分:2)

MDN参考非常好,这些答案中没有任何内容不在该文章中。我建议您阅读ECMA-262 4.3.19至21,以了解数字,数字类型与数字对象之间的区别(可能整个部分一般都要理解类型。

javascript的一个重要方面是它不是强类型的。没有浮点精度类型,也没有整数类型。有值,类型和对象。

变量没有类型,它们的值有。您可以为变量赋值,并且该值可以具有String类型,数字,布尔值等。不要在类型和对象之间混淆 - 您不能指定变量具有特定类型,您可以只为其分配一个具有Type的值。 e.g。

var num = '5'; // the value of num is a String Type
num = +num;    // its value is now a Number Type
num = num/2;   // its value is still a Number Type
               // but if printed looks like a float (2.5)

还有一个Number对象(尽管很少使用),为了评估表达式,javascript方便地将数字原语转换为对象:

(5).toString();  // 5 is converted to a Number object
                 // its toString method is called, returning '5'

在上面,需要分组运算符,否则'dot'将被解释为小数位,而后面的't'将被解释为语法错误。它基本上与 parseInt 相反。

parseInt parseFloat 方法用于将字符串Type值转换为数字Type值,如MDN文章中所示。还有其他方法,例如:

var num = '5';    // string Type
var x = num * 2;  // number Type

变量 x 具有数字类型值,因为乘法会在执行乘法之前将 num 的字符串值转换为数字。

var y = x + 'px';  // string Type

'+'运算符被重载 - 因为表达式中的一个术语是一个字符串,它将被视为连接运算符,因此 x 将被转换为字符串Type,'px '将被连接,字符串'10px'将被分配给 y ,因此其值为字符串类型。

阅读ECMA-262的相关部分,它解释了它是如何工作的。

答案 2 :(得分:1)

他们的名字合理;一个解析字符串表示字符,一个解析字符串表示浮点数。底层的Number实现不会影响他们正在尝试/能够解析的内容。

但是,是的,JavaScript数字是浮点数。

答案 3 :(得分:0)

这两个函数用于从字符串中提取整数和浮点数,但在提取完成后,数字仍将在内部存储为浮点数。

答案 4 :(得分:0)

虽然Javascript没有任何整数类型,但它确实有一些整数函数和运算符。

parseInt函数会解析查找整数格式数字的字符串,并返回整数值,尽管它已转换为Number类型。

整数运算符的一些示例是<<>>移位运算符,它们适用于32位整数。它们操作的数字将转换为操作的整数,结果是转换为Number类型的整数值。

答案 5 :(得分:0)

JavaScript只有双打,这就是两个函数都将返回的内容,但是parseInt将有效地舍入为零。

> parseInt('9007199254740993.5')
9007199254740992
> parseFloat('9007199254740993.5')
9007199254740994