浅谈JavaScript中的Number类型

本文主要探讨JavaScript中的Number类型,包括十进制、八进制和十六进制的表示方式,浮点数值的解析规则,以及科学计数法。此外,还介绍了NaN的特性以及数值转换函数Number()、parseInt()和parseFloat()的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Number类型
最基本的数值字面量格式是十进制整数,十进制整数可以向下面那样直接在代码中输入

var intNum=55;

除了十进制表示外,还可以通过八进制和十六进制来表示。其中,八进制字面值得第一位必须是0,然后是八进制数字序列(0~7)。如果后接的字面值超出范围,则前面的导零失效,后面的值将被当做十进制数值解析。

var a=065;  //八进制的53
var b=085;   //85
var c=08;  //8
alert(a);
alert(b);
alert(c);

八进制字面量在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误。
十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0-9及A-F)。字母可以大小写。

var a=0xA;
var b=0x1f;
console.log(a);//十六进制的10
console.log(b);//十六进制31

在进行算术计算时,所有以八进制和十六进制表示的数值最终会被转换成十进制数值。

  • 浮点数值
    浮点数值就是指该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。虽然小数点前面可以没有整数但不推荐。
var floatNum1=1.2;
var floatNum2=0.2;
var floatNum3=.2;
console.log(floatNum1);//1.2
console.log(floatNum2);//0.2
console.log(floatNum3);//0.2 虽然小数点前面可以没有整数但不推荐

由于保存浮点数值需要的内存空间是保存整数数值的两倍,所以ES会将浮点数值转换为整数值。如果小数点后面没有跟任何数字,会解析成整数保存。如果浮点数值本身表示的就是一个整数,那么该数值就会被转换为整数。

var floatNum4=1.;
var floatNum5=10.0;
console.log(floatNum4);//小数点后没有数字解析为整数1
console.log(floatNum5);//10

可以用e表示法(科学计数法)表示浮点数值。e表示法指表示的数值等于e前面的数值乘以10的指数次幂。前面的数可以是整数也可以是浮点数,中间是一个大写或小写的字母e,后面是10的指数幂。

var floatNum6=3.1456e7;
console.log(floatNum6);//31456000
  • NaN
    NaN,即非数值(Not a Number)是一个特殊的值。在ES中,任何数值除以非数值会返回NaN。
    首先,任何涉及NaN的操作(NaN/10)都会返回NaN。其次,NaN与任何值都不相等,包括NaN本身。
console.log(NaN==NaN); //false

针对NaN的特点,ES定义了isNaN()函数。这个函数接收一个参数,该参数可以是任何类型,函数会确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值(如字符串“10”或者Boolean值)。 任何不能被转换为数值的值都会导致这个函数返回true.

console.log(isNaN(NaN)); //true
console.log(isNaN(10));//false
console.log(isNaN("10"));//false
console.log(isNaN(""));//false
console.log(isNaN("febby"));//true
console.log(isNaN(true));//false
  • 数值转换
    有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。第一个函数Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换为数值。
console.log(Number("Hello Febby")); //NaN
console.log(Number("")); //0
console.log(Number("000032"));//32 前导的零被忽略
console.log(Number(true));//1

parseInt()函数会忽略字符串前面的空格,直至找到第一个非空格字符。用parseInt()转换空字符串会返回NaN(Number()对空字符返回0)。

 console.log(parseInt("1234Febby"));//1234
 console.log(parseInt(""));//NaN
 console.log(parseInt("0xf"));//15 (十六进制)
 console.log(parseInt(32.6));//32  小数点不是有效的数字字符
 console.log(parseInt("075"));//75 (ES5认为是十进制)
 console.log(parseInt("70"));//70
 console.log(parseInt("0xa"));//10 (十六进制)

可以为这个函数提供第二个参数:转换时使用的基数(即多少进制)。

console.log(parseInt("0xf",16));//15
console.log(parseInt("AF",16)); //175  如果指定了16作为第二个参数,字符串可以不带前面的"0x"
console.log(parseInt("AF"));//NaN

第二个参数表示按几进制进行解析成十进制的数

//第二个参数表示按几进制进行解析成十进制的数
console.log(parseInt("10",2));//2
console.log(parseInt("10",8));//8
console.log(parseInt("10",10));//10
console.log(parseInt("10",16));//16

parseFloat()与parseInt()类似,从第一个字符(位置0)开始解析每个字符,但是只解析十进制值,没有用第二个参数指定基数的用法

//parseFloat()只解析十进制值,没有用第二个参数指定基数的用法
console.log(parseFloat("1234Febby"));//1234     
console.log(parseFloat("0xa")); //0  十六进制格式的字符串会被转换为0
console.log(parseFloat("071")); //71
console.log(parseFloat("22.5"));  //22.5     
console.log(parseFloat("22.34.56")); //22.34
console.log(parseFloat("0958.2")); //958.2
console.log(parseFloat("3.145e7")); //31450000

知识来源:《JavaScript高级程序设计》
总结篇传送门:https://blog.youkuaiyun.com/Febby_/article/details/86539862
String类型分篇传送门:https://blog.youkuaiyun.com/Febby_/article/details/90119263

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值