JavaScript入门教程

JavaScript简介
JavaScript语法基础
JavaScript流程控制
JavaScript函数
面向对象编程
JavaScript事件
JavaScript DOM
正则表达式
JavaScript BOM
AJAX

专题分析

浏览器兼容性
JS优化
Web前端开发规范
编辑器推荐
总结和笔记

学习助手

对象参考手册
ECMAScript分析
数据中心
QQ交流群

JavaScript NaN

NaN,即非数值(NOt a Number)是一个特殊的数值,这个数值应用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。例如,在其他编程语言中,任何数值除以 0 都会
导致错误,从而停止代码执行,但在JavaScript中,任何数值除以 0 会返回 NaN,因此不会影响其他代码的执行。

NaN 本身有两个非同寻常的特点:
  • 首先,任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN,这个特点在多步计算中有可能导致问题;
  • 其次, NaN 与任何值都不相等,包括 NaN 本身。
例如,下面的代码会返回 false:
alert(NaN == NaN);  // 显示 false
针对 NaN 的这两个特点,JavaScript 定义了 isNaN() 函数。这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否"不是数值",isNaN() 在接收到一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值, 例如字符串"10"或 Boolean 值。而任何不能被转换为数值的值都会导致这个函数返回 true。请看下面的例子:
alert(isNaN (NaN));  // true
alert(isNaN (10));  // false (10 是一个数值)
alert (isNaN("10"));  // false (可以被转换成数值10 )
alert (isNaN ("blue"));  // true ( 不能转换成数值}
alert (isNaN (true) );  // false (可以被转换成数值1)
这个例子测试了5 个不同的值。测试的第一个值是 NaN 本身,结果当然会返回 true,然后分别测试了数值 10 和字符串"10",结果这两个测试都返回了 false,因为前者本身就是数值,而后者可以被转换成数值。但是,字符串"blue"不能被转换成数值,因此函数返回了 true。由于 Boolean 值 true 可以转换成数值1 ,因此函数返回false。

尽管有点不可思议,但 isNaN() 确实也适用于对象。在基于对象调用 isNaN() 函数时,会首先调用对象的 valueOf() 方法,然后确定该方法返回的值是否可以转换为数值,如果不能,则基于这个返回值再调用 toString() 方法,再测试返回值,而这个过程也是JavaScript中内置函数和操作符的一搬执行流程。