您的位置:首页 > 其它

关于NaN isNaN Number、parseInt/parseFloat的整理汇总

2015-10-20 16:03 429 查看

NaN

JavaScript中有一个特殊的对象:
NaN
,它表示一个非法的数字(Not-a-Number)。这个对象十分特殊,它的类型是
number
,属于原始值,但是和自身不相等。即
NaN === NaN
返回
false


NaN和自身不相等,乍一看违反直觉,但却符合IEEE754的规定。IEEE754的委员会成员曾经解释过将NaN设计为不等的权衡

isNaN

由于
NaN
的特殊性,我们经常需要判断一个值是否为NaN,通常我们使用
isNaN
来判断,例如:

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

isNaN(true);      // false
isNaN(null);      // false
isNaN(1);         // false

如果说
NaN
是JavaScript的一个坑的话,
isNaN
就是另一个坑了。因为
isNaN
会先将传递给它的对象转化为数字类型。而我们知道,对于普通的字符串,转化为数字类型会返回
NaN
。于是就踩坑了。。。

isNaN("1");            // fales "1" 被转化为数字 1,因此返回false
isNaN("SegmentFault"); // true "SegmentFault" 被转化成数字 NaN

所以说,通常对字符串使用
isNaN
方法会返回
true
isNaN
坑爹了——当然,
isNaN
也许会辩驳说这不是它的坑,这是JavaScript强制类型转换的坑。

那么,可不可以不做类型转换直接判断呢?ES6用
Number.isNaN
填上了这个坑。
Number.isNaN
不会转换对象的类型。

Number.isNaN('SegmentFault');  // false

ES6的这个新特性,已经被NodeJS和部分浏览器所支持。

Number()

Number() 函数把对象的值转换为数字。

返回值

如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫秒数。

如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。

实例

在本例中,我们将尝试把不同的对象转换为数字:

<script type="text/javascript">

var test1= new Boolean(true);
var test2= new Boolean(false);
var test3= new Date();
var test4= new String("999");
var test5= new String("999 888");

document.write([code]Number(test1)
+ "<br />");
document.write(
Number(test2)
+ "<br />");
document.write(
Number(test3)
+ "<br />");
document.write(
Number(test4)
+ "<br />");
document.write(
Number(test5)
+ "<br />");

</script>[/code]
输出:

1
0
1256657776588
999
NaN


parseInt()

parseInt() 函数可解析一个字符串,并返回一个整数。

返回解析后的数字。

说明

当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

举例,如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果
string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果
string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

提示和注释

注释:只有字符串中的第一个数字会被返回。
注释:开头和结尾的空格是允许的。
提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。

实例

在本例中,我们将使用 parseInt() 来解析不同的字符串:

parseInt("10");			//返回 10
parseInt("19",10);		//返回 19 (10+9)
parseInt("11",2);		//返回 3 (2+1)
parseInt("17",8);		//返回 15 (8+7)
parseInt("1f",16);		//返回 31 (16+15)
parseInt("010");		//未定:返回 10 或 8


parseFloat()

parseFloat() 函数可解析一个字符串,并返回一个浮点数。

parseFloat 是全局函数,不属于任何对象。

parseFloat 将它的字符串参数解析成为浮点数并返回。如果在解析过程中遇到了正负号(+ 或 -)、数字 (0-9)、小数点,或者科学记数法中的指数(e 或 E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数。同时参数字符串首位的空白符会被忽略。

如果参数字符串的第一个字符不能被解析成为数字,则 parseFloat 返回 NaN。

提示:您可以通过调用 isNaN 函数来判断 parseFloat 的返回结果是否是 NaN。如果让 NaN 作为了任意数学运算的操作数,则运算结果必定也是 NaN。

返回值

返回解析后的数字。

提示和注释

注释:开头和结尾的空格是允许的。
提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
提示:如果只想解析数字的整数部分,请使用 parseInt() 方法。

实例

例子 1

在本例中,我们将使用 parseFloat() 来解析不同的字符串:

<script type="text/javascript">

document.write(parseFloat("10"))
document.write(parseFloat("10.00"))
document.write(parseFloat("10.33"))
document.write(parseFloat("34 45 66"))
document.write(parseFloat(" 60 "))
document.write(parseFloat("40 years"))
document.write(parseFloat("He was 40"))

</script>

输出:

10
10
10.33
34
60
40
NaN
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: