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。所以在做等比较时也一定要慎重。