ECMAScript中NaN的详细解读
程序员文章站
2022-03-01 20:57:15
...
NaN:
Not a Number,即非数值。是一个特殊的数值。
这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。例如,在其他编程语言中,任何数值除以非数值都会导致错误,从而停止代码执行。但在ECMAScript(发音:“ek-ma-script”)中,任何数值除以非数值都会返回NaN,因此不会影响其他代码的执行。
NaN本身有两个非同寻常的特点。首先,任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN与任何值都不相等,包括NaN本身。
console.log(NaN == NaN) //false
console.log(NaN+10); //NaN
console.log(NaN-10); //NaN
console.log(NaN*10); //NaN
console.log(NaN/10); //NaN
console.log("*****************************************");
console.log(10/String); //NaN
console.log(10/Object); //NaN
console.log(10/"Hello");//NaN
console.log("Hello"/10);//NaN
console.log("*****************************************");
console.log(10/true); //10
console.log(true/10); //0.1
console.log(10/false); //Infinity
console.log(false/10); //0
console.log(10/""); //Infinity
console.log(""/10); //0
console.log(10/null); //Infinity
console.log(null/10); //0
console.log("*****************************************");
console.log(10/undefined);//NaN
console.log(undefined/10);//NaN
针对NaN的这两个特点:ECMAScript定义了isNaN()函数。这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,例如“10”或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true。
请看下面例子:
console.log(isNaN(NaN)); //true
console.log(isNaN(10)); //false(10是一个数值)
console.log(isNaN("10")); //false(可以被转换成数值10)
console.log(isNaN("Hello"));//true(不能被转换成数值)
console.log(isNaN("")); //false(可以被转换成数值0)
console.log(isNaN(true)); //false(可以被转换成数值1)
console.log(isNaN(false)); //false(可以被转换成数值0)
console.log(isNaN(null)); //false(可以被转换成数值0)
console.log(isNaN(undefined));//true
isNaN()适用于对象。在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。而这个过程也是ECMAScript中内置函数和操作符的一般执行流程。
上一篇: php闭包的好处
下一篇: 适用于PHP协议解析和协程客户端的是什么
推荐阅读
-
Vue中的v-cloak使用解读
-
Linux shell中的printf的详细用法
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
Python中Lambda表达式的详细解析
-
Spring在web.xml中的配置详细介绍
-
Python中的闭包详细介绍和实例
-
网站设计中如何详细的自定义404错误页面的制作和设置
-
win10环境变量怎么设置?在Windows 10中创建环境变量的3种方法(详细)
-
详解Linux中几个获取硬件详细信息的命令
-
Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决