序
学习JavaScript也有一个星期之久了,每天下班回来看视频、看书、记笔记、动手实践。虽然学的慢,但是也一直在进步。相信以后回首自己学习的一点一滴,又是另外一番心情,每一步都是坚实的脚印。继续记录JavaScript数据类型的笔记吧,Number类型。
Number类型
最基本的数值字面量格式是十进制整数,除十进制整数还可以通过八进制或十六进制的字面值表示。
八进制字面值第1位必须是0,然而是八进制数字序列(0~7),如果字面值超过范围,那么前导将被忽略,后面的数值被当作十进制数值解析。
//八进制
var num1 = 050;
var num2 = 078;
document.write(num1 + "<br>"); //返回 40
//078中的8超出了八进制的范围,所以前导被省略,解析为十进制
document.write(num2 + "<br>"); //返回 78
十六进制字面值前两位必须是0x,后面跟任何十六进制数字(0~9及A~F)。
//十六进制
var num3 = 0xA0;
document.write(num3 + "<br>"); //返回 160
浮点型
浮点数值必须包含一个小数点,并且小数点后面必须至少有一位数字。如果浮点数值本身表示的就是一个整数(1.0),那么该值会被转换为整数。
//浮点型
var float1 = 1.1;
var float2 = 1.0;
document.write(float1 + "<br>"); //返回 1.1
document.write(float2 + "<br>"); //返回 1,被转为整型
对于一些极大或极小的数可以用科学计数法e表示:
var float3 = 1.24e3;
var float4 = 1.24e-3;
document.write(float3 + "<br>"); //返回 1240
document.write(float4 + "<br>"); //返回 0.0024
浮点数值计算会产生舍入误差,所以不要进行如下测试:
var float5 = 0.1;
var float6 = 0.2;
document.write(float5 + float6 == 0.3); //返回 false
数值范围
属性 | 表示的值 |
---|---|
Number.MIN_VALUE | ECMAScript能够表示的最小值 |
Number.MAX_VALUE | ECMAScript能够表示的最大值 |
Infinity | 正无穷 |
-Infinity | 负无穷 |
NaN
非数值(Not a Number)是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。
任何涉及NaN的操作都会返回NaN,NaN与任何值都不相等,包括NaN本身。
var num4 = NaN*0;
document.write(num4 + "<br>"); //返回 NaN
document.write(NaN == NaN); //返回 false
isNaN()能确定参数是否“不是数值”
document.write(isNaN('wuhen') + "<br>") //返回true
document.write(isNaN(NaN) + "<br>") //返回true
document.write(isNaN(100) + "<br>") //返回false
数值转换
有3个函数可以把非数值转换为数值,Number(),parseInt(),parseFloat()。Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。
Number()函数的转换规则:
- 如果是Boolean值,true和false分别转换成1和0
- 如果是数值,只是简单的传入和返回
- 如果是null,返回0
- 如果是undefined,返回NaN
- 如果是空字符串,返回0
//Number()
document.write(Number(true) + "<br>") //返回 1
document.write(Number(100) + "<br>") //返回 100
document.write(Number(null) + "<br>") //返回 0
document.write(Number(undefined) + "<br>") //返回 NaN
document.write(Number('') + "<br>") //返回 0
parseInt()函数的转换规则:
- 会忽略字符串前面的空格,直到找到第一个非空格字符
- 如果第一个字符不是数字字符或者负号,会返回NaN
- 转换空字符串会返回NaN
- 可提供第2个参数,用来指定转换的进制
//parseInt()
document.write(parseInt(' 123dfs') + "<br>") //返回 123
document.write(parseInt('asdf123') + "<br>") //返回 NaN
document.write(parseInt('') + "<br>") //返回 NaN
//指定进制参数
document.write(parseInt('10',2) + "<br>") //返回 2
document.write(parseInt('10',8) + "<br>") //返回 8
document.write(parseInt('10',10) + "<br>") //返回 10
document.write(parseInt('10',16) + "<br>") //返回 16
parseFloat()函数的转换规则:
- 从第一个字符开始解析每个字符,遇见一个无效的浮点数字字符为止
- 字符串中第一个小数点是有效的,而第二个小数点就是无效的
- 只能解析十进制,所以没有像parseInt()有2个参数的用法
//parseFloat()
document.write(parseFloat('123.11sf') + "<br>") //返回 123.11
document.write(parseFloat('123.11.34sf') + "<br>") //返回 123.11
学习总结
学习完Number类型,可谓对JavaScript的数字操作更加熟悉了,也学习到了3个转换函数Number()、parseInt()、parseFloat()。以前只知道一个parseInt()可以转换数字,没想到还有这么多功能,这么多转换规则。知道了这些,以后操作数字起来就会方便许多。