Javascript Number类型常见迷惑点

1:NaN(Not a Number)

表示一个本来要返回数值的操作数没有返回数值的情况。在ECMAscript中,任何数除以0会返回NaN【ps:实际上只有0/0会返回NaN】,正(负)数除以0会返回Infinity(-infinity)。

NaN本身有两个非同寻常的特点,1、任何涉及NaN的操作(如:NaN/10)都会返回NaN,2、NaN与任何值都不想等包括NaN本身。

1 console.log(NaN == NaN);
2 console.log(NaN === NaN);
3 #results
4 //false
5 //false

2、isNaN()函数

ECMAScript定义了isNaN()函数,函数接受一个参数,该参数可以是任何类型,用于判断传入的参数是否是“不是数值“。

 1 console.log(isNaN(NaN));
 2 console.log(isNaN("10"));
 3 console.log(isNaN(20));
 4 console.log(isNaN("blue"));
 5 console.log(isNaN(true));
 6 #results
 7 //true
 8 //false
 9 //false
10 //true
11 //false

3、数值转换

有3个函数可以将不是非数值转换为数值:Number()、parseInt()、parseFloat()。

Number():

转型函数Number()可以用于任何数据类型

Number()函数转换规则:

a.如果是数字值,就简单转入和返回;

b.如果是Boolean类型,true和false分别返回1和0;

c.如果是null值,返回0;

d.如果是undefined,返回NaN;

e.如果是字符串,遵循下列规则:

如果字符串只包含数字,则直接转换成十进制数值。(如果数字前有0会被忽略,如”0123“转换成123)。

如果字符串中包含有效的浮点数形式,将其转换成对应的浮点数值(前导0依然会被忽略)。

如果字符串中包含有效的十六进制格式,将其转换为相同大小的十进制整数值。

如果字符串为空(即不包含任何字符),则转换成0。

如果字符串是包含除上述格式以外的其他格式,则转换为NaN。

1 console.log(Number("0x10"));
2 console.log(Number("10abc"));
3 console.log(Number(" "));
4 #results
5 //16
6 //NaN
7 //0

f.如果是对象,先调用对象的valueOf()方法,然后按照前面的规则返回,如果返回结果为NaN,则再调用对象的toString()方法,再按照前面的规则转换返回的字符串值。

另外两个函数则专门用于把字符串转换成数值,这3个函数对于同样的输入可能会有不同的返回结果。

parseInt():

parseInt()函数在转换字符串是,更多的是看其是否符合数字模式。它会忽略字符串前面的空白字符,直到找到第一个非空白字符;如果第一个字符不是数字或者负号,parseInt()会返回NaN,也就是说parseInt()转换空白字符会返回NaN(与Number()不同),parseFloat()也返回NaN。如果第一个是数字字符,parseInt()会继续解析直到最后一个字符或者遇到了一个非字符。

1 console.log(parseInt("10abc"));
2 console.log(parseInt(" "));
3 console.log(parseInt("0xA"));
4 #results
5 //10
6 //NaN
7 //10

注意:ECMAScript 5 JavaScript引擎中,parseInt()不具备解析八进制的能力,parseInt(‘070‘)输出70!如果需要让parseInt()函数将传入的字符串转换为指定进制的数,可以为其传入第二个参数:转换时使用的技术(即多少进制)。不指定基数意味着让parseInt()自己决定如何让解析字符串,所以为了避免错误的解析,建议无论什么情况下都明确指定基数。

1 console.log(parseInt("AF",16));
2 console.log(parseInt("10",10));
3 console.log(parseInt("10",10));
4 #results
5 //175
6 //10
7 //8

parseFloat()函数与parseInt()函数类似,从第一个字符开始解析,一直到字符串末尾或者直到遇见第一个无效的浮点数字字符为止,解析时第一个小数点有效,第二个小数点无效。parseFloat()函数与parseInt()函数除小数点的区别外,第二个区别在于它始终会忽略前导的0,也就是说parseFloat()在解析十六进制数时会返回0.

1 console.log(parseFloat("22.23.2"));
2 console.log(parseFloat("0x10"));
3 #results
4 // 22.23
5 // 0
时间: 2024-08-12 05:17:15

Javascript Number类型常见迷惑点的相关文章

javascript number类型的精度丢失

今天遇到了一个问题,方法接收参数的时候,参数值会变. 原值是XXXXXXXXXXXXXXXXXXX0002(很长的一串数字,类型应该是字符型) 实际接收的参数末尾2变为了0.找了很长时间没有搞明白 后来休息的时候不知那里闪过一道光,感觉可能是精度丢失问题. 1.js的number类型,double和long都会丢失精度,具体多少位会丢失精度还没有研究 2.js传递参数明知是字符串就按照字符串的写法来(添加引号) 3.要冷静 原文地址:https://www.cnblogs.com/peng18/

Javascript中类型: undefined, number ,string ,object ,boolean

var a1; var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var a7 = NaN;var a8 = undefined; alert(typeof a); //显示"undefined"alert(typeof a1); //显示"undefined"alert(typeof a2); //显示"boolean"

Javascript数据类型——number类型

        ECMAScript规范中使用IEEE754格式来表示整数和浮点数.支持十进制.八进制以及十六进制.有一点注意的是八进制数字在严格模式下是无效的,这可能会影响到程序的正常运行. 避免浮点数等值判断:       众所周知,基于IEEE754进行数据计算会产生舍入误差,最为经典的例子: 0.1+0.2 = 0.30000000000000004 ; 0.15+0.15 = 0.3;        在实际开发中应尽量避免使用浮点数的等值判断. NaN:      关于NaN有两点特别

JavaScript的基本包装类型之Number类型

Number类型:代表数值数据类型和提供数值常数的对象. 一.Number属性: Number 类型有一些静态属性(直接通过 Number 调用的属性,而无须 new 运算符)和方法.       alert(Number.MAX_VALUE); alert(Number.MIN_VALUE); alert(Number.NaN); alert(Number.NEGATIVE_INFINITY); alert(Number.POSITIVE_INFINITY); 二.Number的内置方法: 1

js中Boolean类型和Number类型的一些常见方法

Boolean类型 Boolean类型重写了valueOf() 方法, 返回基本布尔类型值true或false,重写了toString() 方法,返回基本字符串"true" 和 "false" 创建一个Boolean类型的实例 var booleanObj = new Boolean(true); Boolean类型和Boolean值有三个区别: Boolean类型的实例总是真 var falseObject = new Boolean(false); var re

JavaScript对象类型详解

JavaScript对象类型详解 JavaScrtip有六种数据类型,一种复杂的数据类型(引用类型),即Object对象类型,还有五种简单的数据类型(原始类型):Number.String.Boolean.Undefined和Null.其中,最核心的类型就是对象类型了.同时要注意,简单类型都是不可变的,而对象类型是可变的. 什么是对象 一个对象是一组简单数据类型(有时是引用数据类型)的无序列表,被存储为一系列的名-值对(name-value pairs).这个列表中的每一项被称为 属性(如果是函

JavaScript Number 对象

JavaScript Number 对象 JavaScript 只有一种数字类型. 可以使用也可以不使用小数点来书写数字. JavaScript 数字 JavaScript 数字可以使用也可以不使用小数点来书写: 实例 var pi=3.14;    // 使用小数点var x=34;       // 不使用小数点 极大或极小的数字可通过科学(指数)计数法来写: 实例 var y=123e5;    // 12300000var z=123e-5;   // 0.00123 所有 JavaSc

轻松学习JavaScript十一:JavaScript基本类型(包含类型转换)和引用类型

一值的类型 早在介绍JS的数据类型的时候就提到过基本类型和引用类型,不过在说两种类型之前,我们先来了解一下变量的 值的类型.在ECMAScript中,变量可以存在两种类型的值,即原始值和引用值. (1)原始值 存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置. (2)引用值 存储在堆中的对象,也就是说,存储在变量处的值是一个指针,指向存储对象的内存处. 为变量赋值时,ECMAScript的解释程序必须判断该值是原始类型,还是引用类型.要实现这一点,解释程序则需 尝试判断该值是否

JavaScript 的类型

JavaScript 对象 除了数字.字符串.布尔值.null.undefined(都不可变)这5种简单类型,其他都是对象. javascript 存在2套类型系统,一套是元类型,用typeof可以检验,有六种:"number"."string"."boolean"."object"."function"."undefined". 另一套是对象类型系统,是元类型object的一个分支.