在数字中除了Infinity这个英文之外,还有个比较特殊的代表数字的英文NaN。NaN的非缩写为Not a Number,即不是一个数字,它是一个特殊的数值,它本身代表返回的数字并不是数值的情况,这样就可以有效的在JavaScript中避免错误了。因为在其他编程语言,任何数字处以0都会导致错误,造成代码的执行。但是在ECMAScript中,任何数字除以0只会返回NaN,因此并不会影响代码的执行。 不过NaN本身有两个非常寻常的特点。首先,NaN和任何内容的操作结果还会是NaN,所以在多步计算中一定要注意,不然结果可能就会因为这个特点变成NaN了。其次,NaN与任何内容都不想等,包括自己本身。例如: 不过针对NaN的这两个特点,ECMAScript还特别定义了isNaN()函数来帮助我们判断NaN值。这个函数可以接收一个参数,这个参数可以接受任何类型,然后这个函数可以帮助我们判断这个参数是否为所谓的NaN值。当它接受参数时,它会优先把这个值通过Number()方法转化为数值。如果最终可以转化为数值的话则返回false,而如果不能被转化的数值则会返回true。例如: 我们可以通过上述的例子看到,测试的第一个值本身是NaN,所以结果自然会返回true。然后测试了数字5和字符串29,返回结果都为false,因为字符串会通过系统默认的Number()方法,所以会变成数字,所以最终结果都不是NaN。Boolean值true本身可以转化为1,因此函数返回false。不过字符串“leo”不能被转化为数值,所以函数就会返回true了。 不过值得一提的是,isNaN()也可以适用于对象。在基于对象为参数调用isNaN()函数方法时,会优先调用对象的valueOf()方法,然后在确定该方法返回的值是否可以转为数值。如果不能,那么则基于这个返回值再调用toString()方法,再测试返回值。这个过程也是ECMAScript中内置函数和操作符的一般执行流程。