JavaScript 使用isNaN()测试NaN
示例
window.isNaN()
全局函数isNaN()可用于检查某个值或表达式的计算结果是否为NaN。该函数(简而言之)首先检查该值是否为数字,如果未尝试将其转换为(*),然后检查结果值是否为NaN。因此,此测试方法可能会造成混乱。
(*)“转换”方法不是那么简单,有关算法的详细说明,请参阅ECMA-26218.2.3。
这些示例将帮助您更好地了解isNaN()行为:
isNaN(NaN); //真正
isNaN(1); //假:1是数字
isNaN(-2e-4); //假:-2e-4是科学计数形式的数字(-0.0002)
isNaN(Infinity); //假:无穷大是数字
isNaN(true); //假:转换为1,即数字
isNaN(false); //假:转换为0,即一个数字
isNaN(null); //假:转换为0,即一个数字
isNaN(""); //假:转换为0,即一个数字
isNaN(" "); //假:转换为0,即一个数字
isNaN("45.3"); //假:表示数字的字符串,转换为45.3
isNaN("1.2e3"); //假:表示数字的字符串,转换为1.2e3
isNaN("Infinity"); //假:表示数字的字符串,转换为Infinity
isNaN(new Date); //假:日期对象,自历元以来转换为毫秒
isNaN("10$"); //真正 : conversion fails, the dollar sign is not a digit
isNaN("hello"); //真正 : conversion fails, no digits at all
isNaN(undefined); //真正 : converted to NaN
isNaN(); //真正 : converted to NaN (implicitly undefined)
isNaN(function(){}); //真正 : conversion fails
isNaN({}); //真正 : conversion fails
isNaN([1, 2]); //真正 : converted to "1, 2", which can't be converted to a number最后一个有点棘手:检查anArray是否为NaN。为此,Number()构造函数首先将数组转换为字符串,然后转换为数字。这就是为什么原因isNaN([])和isNaN([34])两回false,但isNaN([1,2])和isNaN([true])这两个回报true:因为他们可以转化为"","34","1,2"和"true"分别。通常,除非考虑NaN到数组isNaN()仅包含一个可以将其字符串表示形式转换为有效number的元素,否则它将被视为。
Number.isNaN()
在ECMAScript6中,主要实现了该功能,以避免强制将参数转换为数字的问题。,的确不会在测试之前尝试将值转换为数字。这也意味着仅返回类型为number的值(基本上就是)。Number.isNaN()window.isNaN()Number.isNaN()NaNtrueNumber.isNaN(NaN)
从ECMA-26220.1.2.4:
当Number.isNaN使用一个参数调用时number,将执行以下步骤:
如果Type(number)不是Number,则返回false。
如果为数字NaN,则返回true。
否则,返回false。
一些例子:
//唯一的
Number.isNaN(NaN); //真正
//号码
Number.isNaN(1); //假
Number.isNaN(-2e-4); //假
Number.isNaN(Infinity); //假
//非类型编号的值
Number.isNaN(true); //假
Number.isNaN(false); //假
Number.isNaN(null); //假
Number.isNaN(""); //假
Number.isNaN(" "); //假
Number.isNaN("45.3"); //假
Number.isNaN("1.2e3"); //假
Number.isNaN("Infinity"); //假
Number.isNaN(new Date); //假
Number.isNaN("10$"); //假
Number.isNaN("hello"); //假
Number.isNaN(undefined); //假
Number.isNaN(); //假
Number.isNaN(function(){}); //假
Number.isNaN({}); //假
Number.isNaN([]); //假
Number.isNaN([1]); //假
Number.isNaN([1, 2]); //假
Number.isNaN([true]); //假