javascript类型转换

javascript类型转换

一、转换成布尔值

程序在 if 语句 以及 ||、&&、! 等逻辑判断的环境下会把表达式自动转换成布尔值。

要手动转换为布尔值有两种方法:使用 !! ; 使用 Boolean(),记住前面不要加new。

1、数字转换成布尔值

除了0被转换成false外,所有自他数字都会被转换成true, NaN 也总是被转换成false

2、字符串转换成布尔值

除了空字符串被转换成false外,所有字符串都会被转换成true

3、其他类型转换成布尔值

undefined和null会被转换成false, 任何对象(包括数组)和函数都会被转换成true

4、如果数字为0或NaN,返回false。;否则返回true

二、转换成字符串

转换成字符串有两种方法

  •  
  • 
    '' + x //方法一,用一个空字符串与之相加
    
    String(x) //方法二,使用不带new的字符串构造函数 
    
    		
  • 1、数字转换成字符串

    数字都是按原样转换成字符串,但用科学计数法表示的数字(也就是带e的)会转换成它内部代表的真实的数字的字符串。

    当使用二元的加号运算符时,如果两个运算数中有一个不是数字,则会进行字符串的连接操作,而不是数学加法操作,两个运算数都会被转换成字符串。

     

  • 
    
    []+1+3  //结果为13
    [1]+3   //结果为13
    null+1+3  //结果为4
    
    					
  • 2、他类型转换成字符串

    当对象或函数转换成字符串时,会调用它们的 toString() 方法来进行转换,默认的是 Object.prototype.toString 和 Function.prototype.toString,但它们是可以被我们自定义的toString方法覆盖的。

    undefined值:转换成"undefined"。

    null值:转换成"null".

    布尔值:值为true,转换成"true";值为false,转换成"false".

    三、转换成数字

    1、字符串转换成数字

    除了空字符串会被转换成0以外,如果字符串中是正确的数字书写形式,那么都可以顺利转换成相应的数字,不管是小数、科学计数还是八进制、十六进制形式等。但是如果参杂了其他不能构成数字或不符合数字书写规则的东西,则会被转换成NaN。

    NaN是指不是数字的意思,任何数字数字跟NaN进行运算得到的结果都是NaN,NaN甚至跟自己也不相等。

    2、其它类型转换成数字

    对象和函数总是被转换成NaN,

    undefined值:转换成NaN。

    null值:转换成0.

    布尔值:值为true,转换成1;值为false,转换成0.

    3、parseInt(string, radix)函数,将字符串转换为整数类型的数值。它也有一定的规则

    (1)、忽略字符串前面的空格,直至找到第一个非空字符

    (2)、如果第一个字符不是数字符号或者负号,返回NaN

    (3)、如果第一个字符是数字,则继续解析直至字符串解析完毕或者遇到一个非数字符号为止

    (4)、如果上步解析的结果以0开头,则将其当作八进制来解析;如果以0x开头,则将其当作十六进制来解析

    (5)、如果指定radix参数,则以radix为基数进行解析

    4、Number(mix)函数,可以将任意类型的参数mix转换为数值类型。

    (1)、如果是布尔值,true和false分别被转换为1和0

    (2)、如果是数字值,返回本身。

    (3)、如果是null,返回0.

    (4)、如果是undefined,返回NaN。

    (5)、如果是字符串,遵循以下规则:

            如果字符串中只包含数字,则将其转换为十进制(忽略前导0)

            如果字符串中包含有效的浮点格式,将其转换为浮点数值(忽略前导0)

            如果是空字符串,将其转换为0

            如果字符串中包含非以上格式,则将其转换为NaN

            如果是对象,则调用对象的valueOf()方法,然后依据前面的规则转换返回的值。

            如果转换的结果是NaN,则调用对象的toString()方法,再次依照前面的规则转换返回的字符串值。

    5、parseFloat(string)函数,将字符串转换为浮点数类型的数值

    它的规则与parseInt基本相同,但也有点区别:字符串中第一个小数点符号是有效的,另外parseFloat会忽略所有前导0,如果字符串包含一个可解析为整数的数,则返回整数值而不是浮点数值。

    四、在javascript类型转换中容易出错的地方

    1、在做+操作时一定要注意,因为在javascript中,+既可以是数字的加法,也可以是字符串的拼接。当两个操作数之一是字符串是就会将另一个数字转换为字符串,再做字符串的拼接,例如1+'12'和'1'+12得到的都是字符串'112'。所以如果想要做数字的加法,一定要保证两个操作数都是数字,可以用Number进行强制类型转换,例如1+Number('12')。当然也可以用一些简单地转换例如1+1*'12'。但是不推荐这二种做法,因为语义不明确,会给阅读代码的人造成困惑或误解。

    2、任何变量都可以转换为Boolean值,不是true就是false。常见的空字符串'',undefined,null,NaN,0都可以被转换为false。其他的则都是true。

    3、在定义变量时,经常会这么做var a = a || 10。我们想做的是,如果a被定义了则使用a的值,没定义则赋值为10.但是经常忽略,如果a的值为0。所以这种定义方法一定要慎用。

    4、在javascript中做等比较时有两种做法,一个是==另一个是===,对应的不等比较是!=和!==。===被称作是严格相等。两者的区别是,==会做类型转换而===不会,例如1=='1',1==true都会返回true,而1==='1',1===true则会返回false。所以在做等比较时也一定要慎重。

    标签: