对属性NaN的理解纠正和对Number.isNaN() 、isNaN()方法的辨析

1.属性NaN的误解纠正

NaN (Not a Number)在w3c 中定义的是非数字的特殊值 ,它的对象是Number ,所以并不是任何非数字类型的值都会等于NaN,只有在算术运算或数据类型转换出错时是NaN【说明某些算术运算(如求负数的平方根)的结果不是数字。方法 parseInt() 和 parseFloat() 在不能解析指定的字符串时就返回这个值NaN。对于一些常规情况下返回有效数字的函数,也可以采用这种方法,用 Number.NaN 说明它的错误情况】。NaN 与其他数值进行比较的结果总是不相等的,包括它自身在内,不能用==、===判断,只能调用 isNaN() 来比较

eg

(

The fact that NaN means Not a Number does not mean that anything that is not a number is a NaN.

NaN is a special value on floating point arithmethic that represents an undefined result of an operation.

)

2.Number.isNaN() 、isNaN()方法的辨析(Number.isNaN() is different from the global isNaN() function. )

坑:((NaN是javascript的一个坑,非数字字符串转为数字类型时返回NaN,按理说字符串不是数字类型用isNaN()应该返回false的却返回true,所以isNaN()还在坑里),Number.isNaN()纠正了bug)

(

The global isNaN() function converts the tested value to a Number, then tests it.【

If value can not convert to Number, return true.
else If number arithmethic result  is NaN, return true.
Otherwise, return false.

】全局方法isNaN()会先将参数转为Number 类型,在判断是否为NaN ,所以在类型转换失败或运算错误时值为NaN,返回true,其他全为false

Number.isNan() does not convert the values to a Number, and will  return false for any value that is not of the type Number【

If Type(number) is not Number, return false.
If number is NaN, return true.
Otherwise, return false.

Number.isNaN()先判断参数类型,在参数为Number的前提下运算错误时值为NaN返回true,其他全为false

Tip: In JavaScript, the value NaN is considered a type of number.

)

Number.isNaN()要和全局方法isNaN()一样可以使用parseInt或pareseFloat()先进行类型转换

3.易错混淆实例

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

isNaN(true);      // false
isNaN(null);      // false
isNaN(1);         // false
isNaN("1");            // fales "1" 被转化为数字 1,因此返回false
isNaN("SegmentFault"); // true "SegmentFault" 被转化成数字 NaN
Number.isNaN(‘0/0‘) //string not number false
isNaN(‘0/0‘) //arithmethic ilegal (NaN) true
Number.isNaN(‘123‘) //string not number false
isNaN(‘123‘) //convert to number false
Number.isNaN(‘Hello‘) //string not number false
isNaN(‘Hello‘) //convert fail(NaN) true
Number.isNaN(‘‘) /isNaN(null) //string not number false
Number.isNaN(true) //bool not number false
isNaN(‘‘) /isNaN(null) //convert to 0 false
isNaN(true) //convert to 1 false
Number.isNaN(undefined) //undefined not number flase
isNaN(undefined) //convert fail true

//convert fail true
isNaN(parseInt(undefined))
isNaN(parseInt(null))
isNaN(parseInt(‘‘))
isNaN(parseInt(true))

Number.isNaN(‘NaN‘) //false
isNaN(‘NaN‘) //true
Number.isNaN(NaN) //true
isNaN(NaN) //true

  

 

总结:给我的感觉,在实际运用中 isNaN()用于判断是否为数字 Number.isNaN()用于判断是否运算合法,因此一般使用中都用的是全局的isNaN,把握这两个方法时重点在其算法逻辑(第二点:是先进行类型转化还是先进行类型判断

时间: 2024-08-29 09:22:07

对属性NaN的理解纠正和对Number.isNaN() 、isNaN()方法的辨析的相关文章

关于html标签和属性的基本理解

关于标签和属性的基本理解: html页面的内容主要由"元素"或"标签"组成.使用标签来描述网页的内容. 标签tag一般都是成对出现,开始标签和结束标签,或者开放标签和闭合标签,比如 <b> 和 </b>: W3C的html5规范重新定义和梳理了标签,标签列表基本上就是html5能支持的页面元素: 大多数标签都可以有属性,属性是对标签某个方面特性的说明或约束: 属性一般描述于开始标签中,而不是在结束标签中: 属性总是以名称/值对的形式出现,比如

4.mybatis属性和表的列名不相同时的处理方法

/** * 属性和表的列名不相同时的处理方法 * 1.sql中给列重新命名: * select tid id, tname name from teacher t where tid=#{id} * 2.在teacherMapper.xml中使用resultMap标签 * <select id="getTeacher2" parameterType="int" resultMap="getTeacherMap"> * select *

&lt;22&gt;【掌握】指针变量概念及定义方法+【理解】两变量值交换的方法+【掌握】总结*使用场合

[掌握]指针变量概念及定义方法 1.指针变量 用来存放地址的变量,就是指针变量 2.指针? 就是地址,地址是个常量 3.指针变量的定义 数据类型 *指针变量名; int *p; //定义了一个指针变量,变量名是p //int表示,p只能存放一个int类型的变量的地址 char *p1; //定义了一个指针变量,变量名是p1 //p1只能存放一个char类型数变量的地址 int num=10; char *p = &num; //警告 4.指针变量定义的注意事项 1)“*” 必须得有,如果没有就相

(一)、写一个怪物的类,类中有属性姓名(name),攻击力(attack),有打人的方法(fight)。(方法的重写)

(一).写一个怪物的类,类中有属性姓名(name),攻击力(attack),有打人的方法(fight).再写两个子类:红猪的类:类中有属性姓名(name),攻击力(attack),颜色(color).红猪也有一个打人的方法(fight),要求在此方法中输出"XX猪是XX颜色的,打掉了人XX点血".蛇类:类中有属性姓名(name),有攻击力属性(attack),有几条脚属性(foot).蛇也有一个打人的方法(fight),要求在此方法中输出"XX蛇用XX条脚跑到人面前去打人,打

vertical-align属性的一些理解与认识

在工作上遇到这个问题,只知道vertical-align属性设置元素的对齐方式,所以自己有必要深入理解vertical-align作用,顺便整理出来. 先了解一下vertical-align一些属性: 值 描述 baseline 默认.元素放置在父元素的基线上. sub 垂直对齐文本的下标. super 垂直对齐文本的上标 top 把元素的顶端与行中最高元素的顶端对齐 text-top 把元素的顶端与父元素字体的顶端对齐 middle 把此元素放置在父元素的中部. bottom 把元素的顶端与行

属性 与成员变量的 区别与联系 及属性修饰词理解

成员变量和属性的区别与联系在于: 成员变量是一个“内”概念,反映的是类的结构构成.属性是一个“外”概念,反映的是类的逻辑意义. 成员变量没有读写权限控制,而属性可以指定为只读或只写,或可读可写. 成员变量不对读出作任何后处理,不对写入作任何预处理,而属性则可以. public成员变量可以视为一个可读可写.没有任何预处理或后处理的属性. 而private成员变量由于外部不可见,与属性“外”的特性不相符,所以不能视为属性. 虽然大多数情况下,属性会由某个或某些成员变量来表示,但属性与成员变量没有必然

[有码有真相]python类私有属性等要点理解及测试示例代码

# encoding: utf-8 ''' 1. python约定类定义中"__"开头(至多一个"_"结尾)的属性为"相对"的私有属性 2. 私有属性在类及其子类定义中是"可见"的,在 其它范围正常访问是相对"不可见"的 3. 留下子类可以修改父类私有属性的口子方便debug测试等 4. 在类定义以外可以通过['_'+className+'私有属性名称']名称访问 5. 私有属性引入是避免类,实例等混淆和冲

Python 中的引用和类属性的初步理解

最近对Python 的对象引用机制稍微研究了一下,留下笔记,以供查阅. 首先有一点是明确的:「Python 中一切皆对象」. 那么,这到底意味着什么呢? 如下代码: #!/usr/bin/env python a = [0, 1, 2] # 来个简单的list # 最初,list 和其中各个元素的id 是这样的. print 'origin' print id(a),a for x in a: print id(x), x print '----------------------' # 我们把

CodeFirst EF中导航属性的个人理解

>导航属性: 01.个人理解就是Ef中的属性在实体数据表中不存在(先这么认为); 02.就是除了根据表中列映射出的属性 之外根据表与表之间的关系的关联属性.方便操作与之关联的表; 例如: 有 表A 表B 的关系是1对多,根据A,B表创建A类和B类 那么在A类中除了根据表中列映射出的属性,还要根据表之间的关联关系创建一个B类型的ICollection<>集合属性,就叫做导航属性 而B类除了根据B表中的列创建的属性,还要创建一个A类型的导航属性, 说白了就是根据主键表创建的类 必须创建一个根