number数字类型
  包括数字和NaN,NaN:not a number 但是它是数字类型的
isNaN的用法:检测当前值是否不是有效数字,返回true代表不是有效数字,返回false是有效数字
//=>语法:isNaN([value])
var num=12;
isNaN(num); //->检测num变量存储的值是否为非有效数字 false

isNaN('13') =>false
isNaN('你好呀') =>true
isNaN(true) =>false
isNaN(false) =>false
isNaN(null) =>false
isNaN(undefined) =>true
isNaN({age:9}) =>true
isNaN([12,23]) =>true
isNaN([12]) =>false
isNaN(/^$/) =>true
isNaN(function(){}) =>true

1、isNaN检测的机制:首先验证当前要检测的值是否为数字类型的,如果不是,浏览器会默认的把值转换为数字类型
把非数字类型的值转换为数字
其它基本类型转换为数字:直接使用Number这个方法转换的
[字符串转数字]
Number('13') ->13
Number('13px') ->NaN 如果当前字符串中出现任意一个非有效数字字符,结果则为NaN
Number('13.5') ->13.5 可以识别小数

[布尔转数字]

Number(true) ->1
Number(false) ->0

[其它]
Number(null) ->0
Number(undefined) ->NaN

把引用数据类型值转换为数字:先把引用值调取toString转换为字符串,然后再把字符串调取Number转换为数字
[对象]
({}).toString() ->'[object Object]' ->NaN

[数组]
[12,23].toString() ->'12,23' ->NaN
[12].toString() ->'12' ->12

[正则]
/^$/.toString() ->'/^$/' ->NaN

[其他]
Number('') ->0
[].toString() -> ''
=> isNaN([]):false

2、当前检测的值已经是数字类型,是有效数字返回false,不是返回true(数字类型中只有NaN不是有效数字,其余都是有效数字)
  parseInt / parseFloat,等同于Number,也是为了把其它类型的值转换为数字类型
和Number的区别在于字符串转换分析上
Number:出现任意非有效数字字符,结果就是NaN
parseInt:把一个字符串中的整数部分解析出来,parseFloat是把一个字符串中小数(浮点数)部分解析出来  
parseInt('13.5px') =>13
parseFloat('13.5px') =>13.5parseInt('width:13.5px') =>NaN 从字符串最左边字符开始查找有效数字字符,并且转换为数字,但是一但遇到一个非有效数字字符,查找结束

3. NaN的比较
NaN==NaN:false NaN和谁都不相等,包括自己
if(Number(num)==NaN){alert('num不是有效数字!');}NaN和谁都不相等,条件永远不成立(即使num确实不是有效数字,转换的结果确实是NaN,但是NaN!=NaN的)if(isNaN(num)){//=>检测是否为有效数字,只有这一种方案alert('num不是有效数字!')
}

【布尔 boolean】

只有两个值:true / false,把其它数据类型的值转换为布尔类型:除了“NaN/0/''/null/undefined”这五个值会转换为false,其余的都会转换为true
哪些情况需要把其它类型值转换为布尔呢?
// [手动自己转]
Boolean(0) => false
Boolean([]) => true
[]==false => true   // 都转换为数字 0==0
![]==false => true  // 先算![],把数组转换为布尔取反=>false =>false==false

除了Boolean可把其他类型转化为数字类型外,!和双!!也是把其他类型转化成布尔类型,项目中一般用!!转换(逼格高~)
!0 =>true 叹号在这里是取反的意思(先转化为布尔类型然后再取反)
!!0 =>false 两个叹号只剩下转换为布尔类型了,等价于Boolean
// [程序自己需要转换 =>一般都是条件判断的时候],if内的值会默认转换成布尔类型,如果为真执行,为false则不执行
if(1){//=>如果条件成立,执行大括号中的代码//=>浏览器会把1作为条件:把它转换为布尔的TRUE,条件成立
}

特殊情况:数学运算和字符串拼接 “+”
  当表达式中出现字符串,就是字符串拼接,否则就是数学运算
1+true =>2  //数学运算
'1'+true =>'1true'   //字符串拼接
[12]+10 =>'1210'     //虽然现在没看见字符串,但是引用类型转换为数字,首先会转换为字符串,所以变为了字符串拼接
({})+10 =>"[object Object]10"
[]+10 =>"10"

{}+10 =>10     结果为10,但是这个和以上说的没有半毛钱关系,因为它根本就不是数学运算,也不是字符串拼接,它是两部分代码
{} 代表一个代码块(块级作用域)   +10 才是我们的操作      严格写法:{}; +10;

转载于:https://www.cnblogs.com/jiajialove/p/10998710.html

JS中的NaN和isNaN,简直是双重人格?相关推荐

  1. JS中的NaN和isNaN

    文章目录 一.NaN:not a number 不是个数字的数字类型 但是属于数字类型 特性:1.NaN是假的布尔值 2.NaN与自己都不相等 二.isNaN is not a number 是不是不 ...

  2. js中的NaN并不等于NaN

    在js中,object===object并没有任何问题,但js中的NaN===NaN返回的却是false,这是为什么呢? 因为NaN是Not a Number的缩写,即不是一个数字.如,A不是一个数字 ...

  3. JavaScript中的 NaN 与 isNaN

    NaN NaN 即 Not a Number ,不是一个数字. 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型还有一个很特殊的值,即 NaN . ...

  4. JS中判断NaN的方法

    var tmp = 0/0;     if (isNaN(tmp)){     alert( "NaN" ); }

  5. JS中NaN的认识与ISNaN函数的使用

    NaN & ISNaN 在JS中,NaN用来表示一个非数字的特殊值,当发现无法进行运算时,js不会报错,而是会返回一个NaN NaN的注意事项: NaN为number类型,但NaN表示一个非数 ...

  6. JS中NaN、NULL、undefined、详解

    NaN:保留字(表明数据类型不是数字) undefined:对象属性或方法不存在,或声明了变量但从未赋值. 即当你使用了对象未定的属性或者未定义的方法时或当你声明一个变量,但你确从未对其进行赋值,便对 ...

  7. 聊一聊js中的null、undefined与NaN

    零.寒暄 翻翻自己的博客,上一篇竟然是六月26号的,说好的更新呢?回顾刚刚过去的这个七月,整天都是公司的入职培训加上自己的小论文,每天奋战到凌晨1点多,这是要挂的节奏啊!但是不论怎么说,自己的时间管理 ...

  8. JS中,如何判断一个被转换的数是否是NaN

    var x="abc";//isNaN()函数判断是否是NaNif (isNaN(parseInt(x))) {alert("非数字");} else{aler ...

  9. NaN在js中的意义

    NaN在js中的意义 NaN(Not a number)在一般的计算机专业都表示为 非数值类型,或者不可表示的值. 在javascript中是一种全局对象的属性,表示这个值不是数字,在js中可以将nu ...

最新文章

  1. mxnet自定义训练日志
  2. 小程序分享到朋友圈功能_微信小程序开放分享到朋友圈功能
  3. 产品经理必备知识之网页设计系列(三)-移动端适配无障碍设计及测试
  4. @angular/core里的 NgZone -使得Angular不跟踪变化
  5. 使用OpenCV实现图像中的文字切割
  6. 报表建oracle表,建立Oracle report报表基本步骤及创建报表技巧
  7. vba显示正在加载_简单、易用的VBA过程积木代码
  8. package.json的进阶
  9. 《财富》2020中国40岁以下商界精英榜出炉:张一鸣位列榜首
  10. Ddos攻击攻击与防御
  11. C++ STL学习笔记(5) Vector容器, array容器,deque容器
  12. 分享一个同行的blog,UI方面的。
  13. 兄弟HL-1118加粉清零
  14. 大数据之spark_spark SQL的建表语句
  15. 【计算机视觉】图像检索
  16. matlab打靶法求解薛定谔方程,用MATLAB语言解氢原子与类氢离子的定态薛定谔方程...
  17. PMP备考之路 - 汪博士第十二章(项目采购管理)
  18. 【封面】数字经济引领中国产业改革
  19. 【必知必会的MySQL知识】②使用MySQL
  20. 费马素数(费马质数)

热门文章

  1. C# 平时碰见的问题【1】
  2. [Boost基础]并发编程——asio网络库——定时器deadline_timer
  3. 关于“让我们基于Node.js创建一个Web应用:记事本(三)”
  4. 新的GNSS精度度量是怎样定义的?
  5. 为什么Python是数据科学领域最受欢迎的语言
  6. 计算机视觉工程师必读经典图书推荐
  7. RHEL在VM虚拟机下仅主机模式不能联网的解决方法
  8. android 如何去掉自定义标签页,Android中为TextView增加自定义的HTML标签
  9. 重启openssl服务linux,Nginx的启动、停止与重启---linux
  10. c语言地理坐标存储 转发,纬度/经度坐标的2个列表之间的地理距离