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

来源:互联网 发布:东珈网络精英 编辑:程序博客网 时间:2024/05/17 03:59

NaN

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

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

isNaN

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

isNaN(NaN);       // trueisNaN(undefined); // trueisNaN({});        // trueisNaN(true);      // falseisNaN(null);      // falseisNaN(1);         // false

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

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

所以说,通常对字符串使用isNaN方法会返回trueisNaN坑爹了——当然,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(Number(test1)+ "<br />");document.write(Number(test2)+ "<br />");document.write(Number(test3)+ "<br />");document.write(Number(test4)+ "<br />");document.write(Number(test5)+ "<br />");</script>

输出:

101256657776588999NaN

parseInt()

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

返回解析后的数字。

说明

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

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

提示和注释

注释:只有字符串中的第一个数字会被返回。

注释:开头和结尾的空格是允许的。

提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。

实例

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

parseInt("10");//返回 10parseInt("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>

输出:

101010.33346040NaN

1 0
原创粉丝点击