number数字类型
包含:常规数字、NaN
NaN
not a number: 非数字 不是一个数,但它率属于数字类型
NaN和任何值(包括自己)都不相等:NaN!=NaN,所以我们能用相等的方式判断是否为有效数字
isNaN
检测一个值是否为非有效数字,如果不是有效数字返回true,反之是有效数字返回false
在使用isNaN进行检测的时候,首先会验证检测的值是否为数字类型,如果不是,先基于Number()这个方法,把值转换为数字类型,然后检测
[val] 这样写法叫做:参数描述占位符
把其他类型值转换为数字类型
- Number([val])
注意:undefined代表未定义,未定义代表没有赋值,没有赋值的值它就没有值。没有值的话它就是NaN.
注意:
Number({}) 先调用tostring()方法({}.toString() 对象的toString()是其原型上的方法,监测数据类型)转换成字符串为:"[object Object]" 在调用Number() 转成数字 为 NaN
Number([]) 先调用tostring()方法转换为字符串为 ‘’ 空串,在掉Number() 转换为 0
- parseInt/parseFloat([val],[进制]):也是转换数字的方法,对于对于字符串来说,它是从左到右依次查找有效数字字符,知道遇到非有效数字字符,停止查找(不管后面是否还有数字,都不在找了),把找到的当做数字返回
- 进行比较的时候,可能要出现把其它类型值转换为数字
注意:
在==比较的过程中,数据转换的规则:
【类型一样的几个特殊点】’
{}= = {}:false [] = =[]:false 对象比较的是堆内存的地址
NaN = = NaN:false
【类型不一样的转换规则】
- null = = undefined:true,但是换成===结果是false(因为类型不一致),剩下null/undefined和其它任何数据类型值都不相等
- 字符串==对象 要把对象转换为字符串
- 剩下如果==两边数据类型不一致,都是需要转换为数字再进行比较
null == 0 // false
undefined == 0 // false
JS中的加减乘除本应该是数学运算(如果遇到的值不是数字类型,也需要基于Number()方法转换为数字,在进行运算);但是JS中加法有特殊情况;相加过程中遇到字符串直接变为字符串拼接(+两边都转换为字符串进行拼接toString())
var c=100+true+21.2+null+undefined+‘Tenent’+[]+null+9+false;
console.log©
注: 100+1+21.2+0+Number(undefined)结果为NaN+‘Tenent’+[]+null+9+false;
122.2+NaN=NaN
NaN+‘Tenent’=‘NaNTenent’
‘NaNTenent’ 遇到字符串接下来成为字符串拼接 [].toString()=’’
‘NaNTenent’ +’’= ‘NaNTenent’
‘NaNTenent’+null+9+false=‘NaNTenentnull9false’
结果: ‘NaNTenentnull9false’
错误答案:NaN
parseInt(‘abc123’)结果为NaN 但是NaN和谁都不相等,包括自己
答案:alert(‘number’)