数据类型
判断数据类型的方法:
- typeof
- instanceof
- toString.call(要判断的对象)
- jq中判断数据的方法
0 / 0 <!-- NaN -->
typeof NaN <!-- number -->
NaN === NaN <!-- false -->
Bollean(NaN) <!-- false -->
NaN 与任何数(包括他自己)的运算,得到的都是 NaN
1 / 0 <!-- Infinity -->
1 / -0 <!-- -Infinity -->
-1 / -0 <!-- Infinity -->
Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)
5 * Infinity <!-- Infinity -->
5 - Infinity <!-- -Infinity -->
Infinity / 5 <!-- Infinity -->
5 / Infinity <!-- 0 -->
0 * Infinity <!-- NaN -->
0 / Infinity <!-- 0 -->
Infinity / 0 <!-- Infinity -->
null / Infinity <!-- null会被当成0来做计算,NaN -->
Infinity与undefined计算,返回的都是NaN。
parseInt: 将字符串转为整数
- parseInt方法用于将字符串转为整数。
- 如果字符串头部有空格,空格会被自动去除。
- 如果parseInt的参数不是字符串,则会先转为字符串再转换。
- 字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
- 如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。
- 如果字符串以0x或0X开头,parseInt会将其按照十六进制数解析。
- 如果字符串以0开头,将其按照10进制解析。
- parseInt第二个参数,意为指定进制转换
- 如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回NaN。如果第二个参数是0、undefined和null,则直接忽略。
- 如果字符串包含对于指定进制无意义的字符,则从最高位开始,只返回可以转换的数值。如果最高位无法转换,则直接返回NaN。
parseInt(' 81') <!-- 81 -->
parseInt('12**') <!-- 12 -->
parseInt('0x10') <!-- 16 -->
parseInt('011') <!-- 11 -->
parseInt(0.0000008) <!-- 8 -->
parseInt('1000') <!-- 1000 -->
// 等同于(默认十进制转换)
parseInt('1000', 10) <!-- 1000 -->
parseInt('1000', 2) <!-- 将1000转换成二进制数 -->
parseInt('1000', 6) <!-- 将1000转换成六进制数 -->
parseInt('1000', 8) <!-- 将1000转换成八进制数 -->
parseInt('10', 37) <!-- NaN -->
parseInt('10', 1) <!-- NaN -->
parseInt('10', 0) <!-- 0 -->
parseInt('10', null) <!-- 10 -->
parseInt('10', undefined) <!-- 10 -->
<!--对于二进制来说,1是有意义的字符,5、4、6都是无意义的字符-->
parseInt('1546', 2) <!-- 8 -->
parseInt('546', 2) <!-- NaN -->
<!--十六进制的0x11会被先转为十进制的17,再转为字符串。然后,再用36进制或二进制解读字符串17,最后返回结果43和1-->
parseInt(0x11, 36) <!-- 43 -->
parseInt(0x11, 2) <!-- 1 -->
<!--等同于-->
parseInt(String(0x11), 36)
parseInt(String(0x11), 2)
<!--等同于-->
parseInt('17', 36)
parseInt('17', 2)
<!--第一行的011会被先转为字符串9,因为9不是二进制的有效字符,所以返回NaN-->
parseInt(011, 2) <!-- NaN -->
<!--等同于-->
parseInt(String(011), 2) <!-- NaN -->
<!--等同于-->
parseInt(String(9), 2) <!-- NaN -->
isNaN: 判断一个值是否为NaN
<!--isNaN只对数值有效,如果传入其他值,会被先转成数值。比如,传入字符串的时候,字符串会被先转成NaN,所以最后返回true-->
isNaN(NaN) <!-- true -->
isNaN('Hello') <!-- true -->
<!--对象和数组,isNaN也返回true-->
isNaN({}) <!-- true -->
<!--等同于-->
isNaN(Number({})) <!-- true -->
isNaN(['xzy']) <!-- true -->
<!--等同于-->
isNaN(Number(['xzy'])) <!-- true -->
<!--空数组和只有一个数值成员的数组,isNaN返回false-->
<!--数组能被Number函数转成数值-->
isNaN([]) <!-- false -->
isNaN([123]) <!-- false -->
isNaN(['123']) <!-- false -->
isFinite: 表示某个值是否为正常的数值
<!--除了Infinity、-Infinity、NaN和undefined这几个值会返回false,isFinite对于其他的数值都会返回true。-->
isFinite(Infinity) <!-- false -->
isFinite(-Infinity) <!-- false -->
isFinite(NaN) <!-- false -->
isFinite(undefined) <!-- false -->
isFinite(null) <!-- false -->
isFinite(-1) <!-- false -->