从零开始学web开发之JavaScript-3.数据类型-(1)数值

本节内容大部分直接引用 《JavaScript 标准参考教程(alpha)》,by 阮一峰

1.概述

JavaScript中的所有数字都是以64位浮点数形式储存的,即使整数也是如此。
所以1与1.0是相同的,是同一个数。

IEEE 754浮点数标准:

  • 第1位:符号位,0表示正数,1表示负数
  • 第2位到第12位:指数部分
  • 第13位到第64位:小数部分(即有效数字)

2.整数

整数是不带小数点的数,32位数值。
整数精度为

-2^53~2^53(-9007199254740992~9007199254740992)

如果超出了这个精度,整数将会失去尾数的精确度。

3.浮点数

带有小数点的数值,64位数值。
浮点数精度

±1.7976931348623157×10^3085×10^-324

4.数值表示法

<1>.整数字面量的不同进制表示法

(1). 十进制,没有前导(第一位)0数值。
12,
58。
(2). 八进制,有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
0o377 // 255,
0111 //73

注:通常来说,有前导0的数值会被视为八进制,但是如果前导0后面有数字8和9,则该数值被视为十进制。

(3). 十六进制,有前缀0x或0X的数值

0xff // 255,
0x11 //17
(4). 二进制:有前缀0b或0B的数值。

0b11 //3 ,
0B111 //7
(5). 如果八进制、十六进制、二进制的数值里面,出现不属于该进制的数字,就会报错。
0xzz // 报错
0o88 // 报错
0b22 // 报错

<2>.科学计数法

对于非常大或非常小的数,可以用科学计数法表示浮点数,可以把一个数表示为数字(包括十进制数字)加 e(或 E),后面加乘以 10 的倍数。例如:

var fNum = 5.618e7

该符号表示的是数 56180000。
把科学计数法转化成计算式就可以得到该值:5.618 x 10^7
以下两种情况,JavaScript 会自动将数值转为科学计数法表示,其他情况都采用字面形式直接表示。

  • (1)小数点前的数字多于21位。
1234567890123456789012
// 1.2345678901234568e+21

123456789012345678901
// 123456789012345680000
  • (2)小数点后的零多于5个。
// 小数点后紧跟5个以上的零,就自动转为科学计数法
0.0000003 // 3e-7

// 否则,就保持原来的字面形式
0.000003 // 0.000003

5.特殊数值

<1>.NaN

(1). 简述

Not a Number ,非数值,主要出现在将字符串解析成数字出错的场合,数据类型依然为number。

5 - 'x' // NaN

上面代码运行时,会自动将字符串x转为数值,但是由于x不是数值,所以最后得到结果为NaN。
0除以0也会得到NaN,另一些数学函数运算也有可能出现NaN。

(2). 运算NaN

NaN不等于任何值,包括它本身。

NaN === NaN // false

NaN在布尔运算时被当作false。

Boolean(NaN) // false

NaN与任何数(包括它自己)的运算,得到的都是NaN。

NaN + - x / 1 = NaN
(3). 判断NaN的方法

isNaN方法可以用来判断一个值是否为NaN。

isNaN(NaN) // true
isNaN(123) // false

但是,isNaN只对数值有效,如果传入其他值,会被先转成数值。
比如,传入字符串的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别引起注意,isNaN为true的值,有可能不是NaN,而是一个字符串。

isNaN('Hello') // true
// 相当于
isNaN(Number('Hello')) // true

出于同样的原因,对于对象和数组,isNaN也返回true。

isNaN({}) // true
// 等同于
isNaN(Number({})) // true

isNaN(['xzy']) // true
// 等同于
isNaN(Number(['xzy'])) // true

但是,对于空数组和只有一个数值成员的数组,isNaN返回false。

isNaN([]) // false
isNaN([123]) // false
isNaN(['123']) // false

上面代码之所以返回false,原因是这些数组能被Number函数转成数值。
因此,使用isNaN之前,最好判断一下数据类型。

function myIsNaN(value) {
  return typeof value === 'number' && isNaN(value);
}

判断NaN更可靠的方法是,利用NaN是JavaScript之中唯一不等于自身的值这个特点,进行判断。

function myIsNaN(value) {
  return value !== value;
}

<2>.Infinity

(1). 简述
  • 首先0分为正0与负0,故Infinity也分为正Infinity和负Infinity.
  • 正Infinity:正无穷,数值太大超出了JavaScript可以表示的范围,大于一切数值(NaN除外)。
  • 负Infinity: 负无穷 ,数值太小超出了JavaScript可以表示的范围 ,小于一切数值(NaN除外)。
  • Infinity与NaN比较,总是返回false。
Infinity > NaN // false
-Infinity > NaN // false
Infinity < NaN // false
-Infinity < NaN // false
(2). 运算

一些特殊数值与Infinity的运算结果
与零进行运算

0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity

与null进行运算,null会转为0

null * Infinity // NaN
null / Infinity // 0
Infinity / null // Infinity

与undefined运算,都返回NaN

undefined +-*/ Infinity // NaN
Infinity / undefined // NaN

Infinity加上或乘以Infinity,返回的还是Infinity。

Infinity + Infinity // Infinity
Infinity * Infinity // Infinity

Infinity减去或除以Infinity,得到NaN。

Infinity - Infinity // NaN
Infinity / Infinity // NaN
(3). isFinite函数

isFinite函数返回一个布尔值,检查某个值是不是正常数值,而不是Infinity。

isFinite(Infinity) // false
isFinite(-1) // true
isFinite(true) // true
isFinite(NaN) // false

6.示例网页

网页链接

发布了92 篇原创文章 · 获赞 68 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/pigdreams/article/details/80330958