Write By Monkeyfly

以下内容均为原创,如需转载请注明出处。

前提

在上篇博文《JavaScript基础教程之函数的重新学习》中提到了isNaN()方法,但当时由于时间和篇幅原因,没有对此方法做详细说明。现在专门用一篇文章对该方法的用法进行解释说明。

定义

isNaN() 函数用于检查其参数是否是非数字值。它是JavaScript提供的一个内置函数。

语法

isNaN(x)

说明:
(1)isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。
(2)也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。
(3)如果 参数 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返回的值就是 true。而如果 x 是其他值,则返回 false。
(4)isNaN() 是全局函数,存在隐式的类型转换;

后来在学习的过程中,又发现这样一个函数,功能和isNaN() 类似。如下:

Number.isNaN(x) 

ps:

  • Number.isNaN() 方法确定传递的值是否为 NaN,并且它是 Number类型的。它是原始的全局isNaN()方法的更强大的版本。
  • Number.isNaN() 方法的参数值必须是Number类型的才能进行判断(这是基础),否则返回的都是false。

测试过程如下:

var abc = "120px";
/*判断一个数是否是NaN值(非数值类型)*/
var temp = isNaN(parseInt(abc));
document.write("<br/>" + temp +"<br/>"); //false/*当参数为数字时*/
document.write("<br/>" + "isNaN(0):" + isNaN(0) +"<br/>");//false
document.write("<br/>" + "Number.isNaN(0):" + Number.isNaN(0)  + "<br/>");//false
document.write("<br/>");
document.write("<br/>" + "isNaN(123):" + isNaN(123) +"<br/>");//false
document.write("<br/>" + "Number.isNaN(123):" + Number.isNaN(123) + "<br/>");//false
document.write("<br/>");
document.write("<br/>" + "isNaN(-12.3):" + isNaN(-12.3) +"<br/>");//false
document.write("<br/>" + "Number.isNaN(-12.3):" + Number.isNaN(-12.3) + "<br/>");//false
document.write("<br/>");
document.write("<br/>" + "isNaN(3.1415):" + isNaN(3.1415) +"<br/>");//false
document.write("<br/>" + "Number.isNaN(3.1415):" + Number.isNaN(3.1415) +"<br/>");//false
document.write("<br/>");/*22除以0系统判定为无穷大,不属于NaN,肯定返回false*/
document.write("<br/>" + "isNaN(22/0):" + isNaN(22/0) +"<br/>");//false
document.write("<br/>" + "Number.isNaN(22/0):" + Number.isNaN(22/0) +"<br/>");//false
document.write("<br/>");/*而0除以0系统判定NaN,肯定返回true*/
document.write("<br/>" + "isNaN(0/0):" + isNaN(0/0) +"<br/>");//true
document.write("<br/>" + "Number.isNaN(0/0):" + Number.isNaN(0/0) +"<br/>");//true
document.write("<br/>");/*当参数为数字型字符串时*/
document.write("<br/>" + "isNaN(\"123456\"):" + isNaN("123456") +"<br/>");//false
document.write("<br/>" + "Number.isNaN(\"123456\"):" + Number.isNaN("123456") +"<br/>");//false
document.write("<br/>");/*当参数为纯字符字符串时*/
document.write("<br/>" + "isNaN(\"lala\"):" + isNaN("lala") +"<br/>");//true
document.write("<br/>" + "Number.isNaN(\"lala\"):" + Number.isNaN("lala") +"<br/>");//false
document.write("<br/>");/*当参数为字符串“NaN”时*/
document.write("<br/>" + "isNaN(\"NaN\"):" + isNaN("NaN") +"<br/>");//true
/*Number.isNaN()方法中,字符串 "NaN" 不会被隐式转换成数字 NaN。*/
document.write("<br/>" + "Number.isNaN(\"NaN\"):" + Number.isNaN("NaN") +"<br/>");//false
document.write("<br/>");/*当参数为NaN时*/
document.write("<br/>" + "isNaN(NaN):" + isNaN(NaN) +"<br/>");//true
document.write("<br/>" + "Number.isNaN(NaN):" + Number.isNaN(NaN) +"<br/>");//true
document.write("<br/>");

经测试发现:

1.isNaN()函数会尝试将参数值先用Number()进行转换,即先将字符串转换为数字然后才判断结果。
转换后的结果如果为“非数值”则返回true,转换后发现还是数值则返回false。
2.

console.log(0/0)     NaN        非数值型
console.log(22/0)    Infinity   <数>无穷大
所以,
isNaN(0/0);     //true
isNaN(22/0);    //false
22除以0系统判定为无穷大,不属于NaN,肯定返回false。而0除以0系统判定NaN,肯定返回true。

3.

typeof "NaN"        "string"
typeof NaN          "number"

4.

console.log(NaN)     NaN(输出前判断了它的类型为NaN)
console.log("NaN")   NaN(字符串原样输出)
console.log(123)     123(数字也会原样输出)
//系统会认为它们是变量,没有定义,连声明也没有,直接报错
console.log(num123)  //Uncaught ReferenceError:num123 is not defined
console.log(number)  //Uncaught ReferenceError:number is not defined

此时,又引出另外一个问题【变量的定义和声明的区别】

在JavaScript中:
var  a;       //这就是声明了变量。但是未定义!【定义就意味着要给变量赋值。】
var  a = 123; //这就是定义了变量。【声明了并且赋值了,就是定义】

举例:

var abc;
console.log(abc);   /*undefined*/
console.log(adc);   /*Uncaught ReferenceError:adc is not defined*/

说明:
ReferenceError(引用错误) 对象表明一个不存在的变量被引用。

必须知道:

  • 在js中使用一个变量,一般是先声明变量,然后给它赋值。
  • 而且所有的变量都是由var声明的。
  • 在这点上,JavaScript跟C、Java是不同的。

举例:

//不使用var定义变量:
function abc(){
    console.log(s);
    s = "hello world";
}
abc(); //直接报错,s变量根本就不存在,Uncaught ReferenceError:s is not defined
---------------------------------------------------------
//使用var定义变量:
function abcd(){
    console.log(c);
    var c = "hello world";
}
abcd();//不会报错,显示undefined,意思是变量c使用var关键字声明了但是没有定义
---------------------------------------------------------

结论:使用var 定义变量,会让变量的声明提前。

举例:

var a = 'hello World';
function bc(){var a = 'hello Fly';console.log(a);
}
bc()                //'hello Fly'
console.log(a);     //'hello world'
var a = 'hello World';
function bc(){a = 'hello Fly';console.log(a);
}
bc()                //'hello Fly'
console.log(a);     //'hello Fly'

结论:在函数作用域内,使用var定义的变量是局部变量,不使用var定义的就成了全局变量。

注意:

  • NaN是非常特殊的值,它不和任何类型的值相等,包括它自己。
  • 同时它与任何类型的值比较大小时都返回false。

分析:

Number.isNaN(参数)    
  • 首先,参数必须是number型(数值型)
    像这种的通通不行:0;”123”;”str”;true;false;”“;” “;”NaN”等
  • 如果值为非数值(NaN值),返回true。【比如:0/0、NaN】
  • 如果值为其他,返回false。

问题:

//这为什么也会输出true呢?
console.log(Number(0) == ""); //true

答案:

//在进行比较时会进行隐式类型转换,空字符串会被自动转换成 0
即console.log(Number(0) == 0); //自然返回为true。

但是,

console.log(Number(0) === 0);   //这还是输出true
console.log(Number(0) === ""); //false,因为不进行类型转换那就不会相等了

结束语

以上内容,就是自己对isNaN()方法的理解和学习,如果存在问题,欢迎大家批评指正。目前就总结了这么多,有可能日后还会继续完善,希望可以对初学JavaScript的同学有所帮助。(ps:我也是一个初学者)

isNaN()内置函数的用法相关推荐

  1. php连接函数config,smarty内置函数config_load用法实例

    本文实例讲述了smarty内置函数config_load用法.分享给大家供大家参考.具体如下: {config_load}用于从配置文件中,加载到配置变量.详细用法如下: 配置文件:foo.conf ...

  2. python中字符串函数的用法_python中字符串内置函数的用法介绍(代码)

    本篇文章给大家带来的内容是关于python中字符串内置函数的用法介绍(代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. capitalize() 首字母大写a='somewor ...

  3. Python:'string'字符串内置函数的用法

    本文主要讲的是在python中,str字符串的各类内置函数的用法 id() 打印出指定字符串的内存地址 s='123456789' print(s[1])#输出字符串中指定的字符 print(s[-1 ...

  4. python中reversed是什么意思_Python内置函数reversed()用法分析

    这篇文章主要介绍了Python内置函数reversed()用法,结合实例形式分析了reversed()函数的功能及针对序列元素相关操作技巧与使用注意事项,需要的朋友可以参考下 reversed()函数 ...

  5. python中randrange函数_python 函数中的内置函数及用法详解

    总结一下Python解释器包含的一系列的内置函数,下面表格按字母顺序列出了内置函数: 下面就一一介绍一下内置函数的用法: 1.abs() 返回一个数值的绝对值,可以是整数或浮点数等. print(ab ...

  6. python中字符串函数的用法_python中字符串内置函数的用法总结

    capitalize() 首字母大写 a='someword' b=a.capitalize() print(b) ->Someword casefold()&lower() 所有字母变 ...

  7. python编写函数模拟内置函数sorted_python内置函数sorted()用法深入分析

    本文实例讲述了python内置函数sorted()用法.分享给大家供大家参考,具体如下: 列表对象提供了sort()方法支持原地排序,而内置函数sorted()不支持原地操作只是返回新的列表,并不对原 ...

  8. mysql+case_mysql内置函数case用法介绍

    本节内容: mysql内置函数case使用介绍 mysql对case函数的解释: 复制代码 代码示例: mysql> ? case Many help items for your reques ...

  9. 详解Python内置函数iter()用法

    iter()函数用来返回指定对象的迭代器,有两种用法:iter(iterable)和iter(callable, sentinel),前者要求参数必须为序列或者有自己的迭代器,后者会持续调用参数cal ...

最新文章

  1. C++智能指针: shared_ptr 实现详解
  2. IEA:截止2015年全球太阳能光伏装机累计超228GW
  3. redis编译安装:make 的新错误--collect2: ld returned 1 exit status
  4. 丑憨批的爬虫笔记3(实例)
  5. docker svn
  6. 深圳零基础自学python_深圳学习python
  7. CentOS6.4下Mysql数据库的安装与配置
  8. python最小值最大化和最大值最小化_OJ 21658::Monthly Expense(二分搜索+最小化最大值)...
  9. 小米浏览器html文件怎么打开方式,怎么设置浏览器-开启小米浏览器这三个功能,切换、搜索、编辑都让你事半功倍...
  10. HL-1208机器清零方法
  11. 前端JavaScript命名规范初稿01版(2022)
  12. 特斯拉中国裁员约10%,撕下了外企新能源的遮羞布!
  13. 网宿科技孙靖泽:CDN规模门槛为5T,整合潮年底就会出现
  14. python怎么定义一个整数_python整数实现
  15. Watchguard Firebox 配置DKEY动态口令认证
  16. 对成功的渴望和恐惧——谈心理学中的“瓦伦达效应”和“约拿情结”
  17. 看门狗电路 通俗理解
  18. 决策树桩(Decision Stump)
  19. SourceInsight4.0自定义编译命令
  20. etf文件服务器,ETF基金投资完整攻略(干货分享)

热门文章

  1. MySQL系列---事务与锁详解
  2. USB设备在连接PC时的reset从何而来?
  3. Spark之Spark Core (RDD弹性分布式数据集)
  4. C++ 知识点记录(6)类的继承(Cap13)
  5. undefined control sequence_PostgreSQL----Sequence序列的那些事
  6. “好吃的”奥利奥 Android 8.0 正式发布:更快、更强大、更安全
  7. 六招教你用Python构建好玩的深度学习应用
  8. 对话李笑来:区块链世界里老实做个好人就能赚很多钱
  9. 某二次元游戏的单机玩法
  10. 数据完整性采取哪些技术实现_接线端子插针插孔的焊接方法是通过哪些技术来实现的?...