JavaScript类型转换

164 阅读1分钟

显示类型转换

Number() 和 parseInt() parseFloat() 的区别

  • 布尔值和null 

    var a = true,
        b = false,
        c = null;
    
    console.log(Number(a)); // -> 1
    console.log(Number(b)); // -> 0
    console.log(Number(c)); // -> 0
    console.log(parseInt(a)); // -> NaN
    console.log(parseInt(b)); // -> NaN
    console.log(parseInt(c)); // -> NaN
    
  • undefined都转换为NaN

  • 字符串转换数字,如果开头的是非数字则都转化为NaN。开头为数字parseInt()和parseFloat()会从开头截取到非数字的位置停止,而Number() 只要字符串中包含非数字的字符结果就是NaN。

    var d = 'a1',
        e = '1a';
    console.log(Number(d)); // -> NaN
    console.log(parseInt(d)); // -> NaN
    console.log(Number(e); // -> NaN
    console.log(parseInt(e)); // -> 1
    
  • 遇到小数Number()转化的字符串中小数点是有效的,而parseInt() 遇到小数点会停止解析,parseFloat() 所解析的字符串中第一个小数点是有效的。

    var f = '3.14';
    console.log(Number(f)); // -> 3.14
    console.log(parseInt(f)); // -> 3
    console.log(parseFloat(e); // -> 3.14
    

隐式类型转换

var num = '123';
num++;
typeof(num); // -> number

var str = 'abc';
str = str + 6;
console.log(str); // -> "abc6"

var mul = '3' * 1;
tyoeif(mul); // -> number
  • 遇到+只要有一边为字符串类型,默认另一边转换为字符串然后进行拼接。* 、/、 %、 -、>、 <、 >=、 <=、!=、== 只要又一边为number 另一边就转换为 number,两边都为字符串时比较ASCII码值。
  • isNaN() 内部是通过Number()来转换的, 可以转换为数字的返回false。