数据类型的判断及数据转换

448 阅读2分钟

数据类型

判断数据类型的方法:

  1. typeof
  2. instanceof
  3. toString.call(要判断的对象)
  4. 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: 将字符串转为整数

  1. parseInt方法用于将字符串转为整数。
  2. 如果字符串头部有空格,空格会被自动去除。
  3. 如果parseInt的参数不是字符串,则会先转为字符串再转换。
  4. 字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
  5. 如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。
  6. 如果字符串以0x或0X开头,parseInt会将其按照十六进制数解析。
  7. 如果字符串以0开头,将其按照10进制解析。
  8. parseInt第二个参数,意为指定进制转换
  9. 如果第二个参数不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回NaN。如果第二个参数是0、undefined和null,则直接忽略。
  10. 如果字符串包含对于指定进制无意义的字符,则从最高位开始,只返回可以转换的数值。如果最高位无法转换,则直接返回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 -->