JavaScript基本类型值

在JavaScript的内部采用IEEE754格式来表示数字,所以不区分整数和浮点数,都是用64位浮点数的形式储存。就是说,在JavaScript内部,就根本没有小数。但是有些运算必须得需要整数完成,所以JavaScript有时会把64位的浮点数转换成32位的整数,再进行运算。

整数

JavaScript对整数提供四种表示方法:

1、二进制:有前缀0b的数值,出现0,1以外的数字会报错

2、八进制:有前缀0o的数值,或者是以0后面再跟一个数字(0-7)。如果超出了前面所述的数值范围,则会忽略第一个数字0,视为十进制数

注意:八进制字面量在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误

3、十六进制:有前缀0x,后跟任何十六进制数字(0~9及A~F),字母大小写都可以,超出范围会报错

4、十进制

var num2 = 0b11; console.log(num2); //3 var num2 = 0b12; console.log(num2); //报错 var num8 = 0o76; console.log(num8); //02 var num8 = 0o78; console.log(num8); //报错 var num16 = 0x2a; console.log(num16); //42 var num16 = 0x2h; console.log(num16) //报错

浮点数

所谓浮点数,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。与整数不同,浮点数只能用十进制来表示

浮点数的精度远远不如整数,所以设计浮点数的运算好比较要小心

例如:

console.log(0.1 + 0.2 == 0.3); //false 0.30000000000000004 console.log(0.6/0.2); //2.9999999999999996

科学计数法

对于那些极大极小的数值,可以用e表示法(即科学计数法)表示的浮点数值表示。用e表示法表示的数值等于e前面的数值乘以10的指数次幂

以下两种情况,JavaScript会自动将数值转为科学计数法表示,其他情况都采用字面形式直接表示。

1、小数点前的数字多余21位

console.log(1234567890123456789012);// 1.2345678901234568e+21 console.log(123456789012365648787); //123456789012365660000 

2、小数点后面的0多余5位

console.log(0.0000006);//6e-7 console.log(0.000006); //0.000006

数值范围

由于内存的限制,ECMAScript并不能保存世界上所有的数值,所以就有了最大值和最小值

最小值保存在Number.MIN_VALUE中,这个值是5e-324

最大值保存在Number.MAX_VALUE,这个值是1.7976931348623157e+308

console.log(Number.MIN_VALUE) //5e-324 console.log(Number.MAX_VALUE); //1.7976931348623157e+308

如果数字超过最大值,javascript会返回Infinity,这称为正向溢出(overflow);如果等于或超过最小负值-1023(即非常接近0),javascript会直接把这个数转为0,这称为负向溢出(underflow)

如果要想确定一个数值是不是有穷的,可以使用isFinite()函数。这个函数在参数位于最小与最大数值之间时会返回true

var result = Number.MAX_VALUE + Number.MAX_VALUE; console.log(isFinite(result)); //false

特殊数值

1、+0和-0

这两个0在大对数的情况下都是等价的

-0 === +0; //true 0 === -0; //true 0 === +0; //true

但是在作为分母的时候是不一样的

1/-0 == 1/+0; //false

2、infinity

Infinity表示“无穷”,用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity。

Math.pow(2,Math.pow(2,100));//Infinity 1/0;//Infinity

Infinity参与的运算结果只能是其本身、0或NaN

* Infinity;//Infinity - Infinity;//-Infinity + Infinity;//Infinity / Infinity;//0 Infinity / 2;//Infinity Infinity * Infinity;//Infinity Infinity - Infinity;//NaN Infinity + Infinity;//Infinity Infinity / Infinity;//NaN

3、NaN

这个数值表示一个本来要返回数值的操作数未返回数值的情况

NaN与任何值不相等,包括它本身,并且涉及NaN的任何操作都会返回NaN

5 - 'x'; //NaN Math.acos(2); //NaN 0 / 0; //NaN NaN == NaN;//false NaN == Infinity;//false

NaN不是一种独立的数据类型,而是一种特殊数值,它的数据类型依然属于Number

 typeof NaN; //number

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

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

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

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

数制转换

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzfwz.html