我在MDN Reintroduction to JavaScript上读到JavaScript编号只是一个浮点精度类型,并且JavaScript中没有整数。然而,JavaScript有两个函数,parseInt
和parseFloat`。在做了一些谷歌搜索后,我的结果好坏参半。
那么,JavaScript是否在数字类型中抽象出整数和双精度的细节,或者JavaScript只有双精度数字类型而且函数parseInt
和parseFloat
命名不佳?
答案 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