isNaN()内置函数的用法
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()内置函数的用法相关推荐
- php连接函数config,smarty内置函数config_load用法实例
本文实例讲述了smarty内置函数config_load用法.分享给大家供大家参考.具体如下: {config_load}用于从配置文件中,加载到配置变量.详细用法如下: 配置文件:foo.conf ...
- python中字符串函数的用法_python中字符串内置函数的用法介绍(代码)
本篇文章给大家带来的内容是关于python中字符串内置函数的用法介绍(代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. capitalize() 首字母大写a='somewor ...
- Python:'string'字符串内置函数的用法
本文主要讲的是在python中,str字符串的各类内置函数的用法 id() 打印出指定字符串的内存地址 s='123456789' print(s[1])#输出字符串中指定的字符 print(s[-1 ...
- python中reversed是什么意思_Python内置函数reversed()用法分析
这篇文章主要介绍了Python内置函数reversed()用法,结合实例形式分析了reversed()函数的功能及针对序列元素相关操作技巧与使用注意事项,需要的朋友可以参考下 reversed()函数 ...
- python中randrange函数_python 函数中的内置函数及用法详解
总结一下Python解释器包含的一系列的内置函数,下面表格按字母顺序列出了内置函数: 下面就一一介绍一下内置函数的用法: 1.abs() 返回一个数值的绝对值,可以是整数或浮点数等. print(ab ...
- python中字符串函数的用法_python中字符串内置函数的用法总结
capitalize() 首字母大写 a='someword' b=a.capitalize() print(b) ->Someword casefold()&lower() 所有字母变 ...
- python编写函数模拟内置函数sorted_python内置函数sorted()用法深入分析
本文实例讲述了python内置函数sorted()用法.分享给大家供大家参考,具体如下: 列表对象提供了sort()方法支持原地排序,而内置函数sorted()不支持原地操作只是返回新的列表,并不对原 ...
- mysql+case_mysql内置函数case用法介绍
本节内容: mysql内置函数case使用介绍 mysql对case函数的解释: 复制代码 代码示例: mysql> ? case Many help items for your reques ...
- 详解Python内置函数iter()用法
iter()函数用来返回指定对象的迭代器,有两种用法:iter(iterable)和iter(callable, sentinel),前者要求参数必须为序列或者有自己的迭代器,后者会持续调用参数cal ...
最新文章
- C++智能指针: shared_ptr 实现详解
- IEA:截止2015年全球太阳能光伏装机累计超228GW
- redis编译安装:make 的新错误--collect2: ld returned 1 exit status
- 丑憨批的爬虫笔记3(实例)
- docker svn
- 深圳零基础自学python_深圳学习python
- CentOS6.4下Mysql数据库的安装与配置
- python最小值最大化和最大值最小化_OJ 21658::Monthly Expense(二分搜索+最小化最大值)...
- 小米浏览器html文件怎么打开方式,怎么设置浏览器-开启小米浏览器这三个功能,切换、搜索、编辑都让你事半功倍...
- HL-1208机器清零方法
- 前端JavaScript命名规范初稿01版(2022)
- 特斯拉中国裁员约10%,撕下了外企新能源的遮羞布!
- 网宿科技孙靖泽:CDN规模门槛为5T,整合潮年底就会出现
- python怎么定义一个整数_python整数实现
- Watchguard Firebox 配置DKEY动态口令认证
- 对成功的渴望和恐惧——谈心理学中的“瓦伦达效应”和“约拿情结”
- 看门狗电路 通俗理解
- 决策树桩(Decision Stump)
- SourceInsight4.0自定义编译命令
- etf文件服务器,ETF基金投资完整攻略(干货分享)
热门文章
- MySQL系列---事务与锁详解
- USB设备在连接PC时的reset从何而来?
- Spark之Spark Core (RDD弹性分布式数据集)
- C++ 知识点记录(6)类的继承(Cap13)
- undefined control sequence_PostgreSQL----Sequence序列的那些事
- “好吃的”奥利奥 Android 8.0 正式发布:更快、更强大、更安全
- 六招教你用Python构建好玩的深度学习应用
- 对话李笑来:区块链世界里老实做个好人就能赚很多钱
- 某二次元游戏的单机玩法
- 数据完整性采取哪些技术实现_接线端子插针插孔的焊接方法是通过哪些技术来实现的?...