二十五岁时我们都一样愚蠢、多愁善感,喜欢故弄玄虚,可如果不那样的话,五十岁时也就不会如此明智。
标题:JavaScript数字
JavaScript的只有一种类型的数字.
数字可以有也可以没有小数.
JavaScript中的数字
JavaScript 数字可以有也可以没有小数:
var x = 34.00; // A number with decimals var y = 34; // A number without decimals特别大的或者特别小的数字可以用科学计数法:
var x = 123e5; // 12300000 var y = 123e-5; // 0.00123
JavaScript 数字总是64位浮点
不像许多其他的编程语言,JavaScript没有定义不同类型的数字, 像整型、短整型、长整型、浮点型等.
JavaScript 数字总是存储为双精度浮点数, 按照国际IEEE 754标准.
这种格式将数字存储在64位,其中数字(分数)存储在位0到51,指数在位52到62,和符号在位63:
Value (aka Fraction/Mantissa) Exponent Sign 52 bits (0 - 51) 11 bits (52 - 62) 1 bit (63)
精确度
整数被认为是精确到15位数.
var x = 999999999999999; // x will be 999999999999999 var y = 9999999999999999; // y will be 10000000000000000小数的最大数量 17, 但浮点运算并不总是100%准确:
var x = 0.2 + 0.1; // x will be 0.30000000000000004为了解决上述问题,可以利用乘法和除法:
var x = (0.2 * 10 + 0.1 * 10) / 10; // x will be 0.3
十六进制
JavaScript 解读数字常量作为16进制,如果他们以0x开头.
var x = 0xFF; // x will be 255不要用前导零写数字 (像 07). 一些JavaScript版本解释数字如果他们用前导零为八进制.
默认情况下,JavaScript显示数字为10进制数.
但是你能使用toString()方法 作为16进制、8进制和2进制输出数字.
var myNumber = 128; myNumber.toString(16); // returns 80 myNumber.toString(8); // returns 200 myNumber.toString(2); // returns 10000000
Infinity
正无穷大 (或者 负无穷大) 如果你计算一个数超出了最大数的范围,将返回的数字.
var myNumber = 2; while (myNumber != Infinity) { // Execute until Infinity myNumber = myNumber * myNumber; }除以0(零)也产生无穷大的数:
var x = 2 / 0; // x will be Infinity var y = -2 / 0; // y will be -InfinityInfinity 是一个数字: Infinity的typeof返回number.
typeof Infinity; // returns "number"
NaN - 不是一个数字
NaN是一个javascript的保留字,表示一个数不是一个合法的数.
试图用非数值字符串做算术会导致 NaN (Not a Number):
var x = 100 / "Apple"; // x will be NaN (Not a Number)但是,如果字符串包含一个数值,结果将是一个数字:
var x = 100 / "10"; // x will be 10你可以使用全局JavaScript函数isNaN()来判断一个值是否是一个数字
var x = 100 / "Apple"; isNaN(x); // returns true because x is Not a Number注意NaN. 如果一个操作数是NaN,结果也是NaN:
var x = NaN; var y = 5; var z = x + y; // z will be NaN或结果可能会是一个字符串连接:
var x = NaN; var y = "5"; var z = x + y; // z will be NaN5NaN 是一个数字, typeof NaN 返回 number:
typeof NaN; // returns "number"
数字可以是对象
通常的JavaScript数字是原始值,由字面量创建: var x = 123
但数字也可以使用关键字new创建为对象: var y = new Number(123)
var x = 123; var y = new Number(123); // typeof x 返回 number // typeof y 返回 object不要创建数字对象。它减慢执行速度。new关键字使代码复杂化。这会产生一些意想不到的结果:
当使用 == 操作符时, 等数相等:
var x = 500; var y = new Number(500); // (x == y) is true because x and y have equal values当使用===运算符时,相等数不相等,因为操作符在类型和值上都期望相等.
var x = 500; var y = new Number(500); // (x === y) is false because x and y have different types甚至更糟。对象不能比较:
var x = new Number(500); var y = new Number(500); // (x == y) is false because objects cannot be compared比较两个JavaScript对象将始终返回false。