已知JS数据类型总共7种:
数值(number):整数和小数(比如1和3.14)
字符串(string):文本(比如Hello World)。
布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)
undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值
null:表示空值,即此处的值为空。
对象(object):各种值组成的集合。
以及ES6新增的symbol。
那么数据之间各种类型是可以转换的,如:
1、变成字符串(string)
数值变字符串
var n=1
n.toString() //"1"
布尔值变字符串
var b=true
b.toString() //"true"
null变字符串
var n=null
n.toString() //报错TypeError: n is null
undefined变字符串
var n=undefined
n.toString() //报错TypeError: n is undefined
对象变字符串
var n={}
n.toString() //"[object Object]"
可见只有null和undefined两种类型无法变成字符串,而且会报错。而对象则返回"[object Object]",能返回但返回的却不是我们想要的答案。
另外还有一种写法,效果与toString()方法一样,而且更简便。
在所有想变成字符串的值前写''+(值后也可以+''):
1+'' //"1"
var object=1
object+'' //"[object Object]"
null+'' //"null"
undefined+'' //"undefined"
var n=true
n+'' //"true"
因为加号只能加同类的东西,所以会把加的东西也变成字符串。
另外:
1+1 //2
1+"1" //"11" 这是为什么,因为这个等同于↓
(1).toString()+'1' //"11"
另还有一种全局函数的方法:window.String()
var n=1
window.String(1) //"1"
string能把不是字符串的(把对象的值)转换为字符串:
window.String({}) //"[object Object]"
window.String(true) //"true"
window.String(null) //"null"
window.String(undefined) //"undefined"
与+''功能是一样的~
2、变成布尔值(boolean)
数值转布尔值
Boolean(1) //true
Boolean(2) //true
Boolean(0) //false
只有0的布尔值是false
字符串转布尔值
Boolean('') //false
Boolean(' ') //true
Boolean("") //false
Boolean('1') //true
可见空字符串无法转成布尔值
null、undefined无法转布尔值
Boolean(null) //false
Boolean(undefined) //false
对象转布尔值
Boolean({}) //true
Boolean({name:'frank'}) //true
只要是对象,无论空不空都返回true
另还有一种更加简便的方(写)法可以转换布尔值:
运用!运算符,!运算符是非、反、否的意思,任何在前面加!就是取反的意思,那么写两个!!就是双重否定变肯定。
!true //false
!!true //true
!!1 //true
!!0 //false
!!'' //false
!!"" //false
!!' ' //true
!!{} //true
!!{name:'frank'} //true
!!null //false
!!undefined //false
以上和Boolean()效果是一样的。
在JS里,其他值变成布尔时,只有5个特殊值,是除布尔、对象以外四个类型(不包含symbol),均有特殊值。如:
数值(number)里只有2个会变成false:0,NaN。
字符串(string)里的''空字符串。
null,null本身。
undefined,undefined本身。
对象(object)因为包含了所有的数组和函数,所以全是true,即使是空的。
除以上5个特殊值,其余值都可转换成布尔值,因此这五个值就是“五个falsy值”。
3、转为Number
将字符串转成数字的方法有五种:
- Number()
Number('1') //1
Number('1.23') //1.23
- parseInt()全局函数
parseInt方法用于将字符串转为整数。
parseInt('1') //1
parseInt('1.23') //1.23 (通常默认转成十进制)
但也有以下情况:
parseInt('011') //11
parseInt('011',8) //9
parseInt('011',10) //11
parseInt('s') //NaN
parseInt('1s') //1
parseInt('12s') //12
字符串转为整数的时候,parseInt会把一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分,所以会有这种情况。
- parseFloat()
parseFloat方法用于将一个字符串转为浮点数,但也只能转成十进制数。
parseFloat('1.23') //1.23
- 在字符串后
-0
任何东西,-0都会变数值:
'123'-0 //123
'1.23'-0 //1.23
'1'-0 //1
很神奇,它既有parseInt的功能,也有parseFloat的功能,而且简便好用!
- 用取正的方法+
+'1' //1
+'1.23' //1.23
+'.1' //0.1
+'-1' //-1
这里的+表示取它原本的值,但是是以数字的形式,所以-1原本值还是-1。
不过这种方法容易容易让人理解错误,以为在取绝对值。
另外两个,null和undefined把他们变成数值并无意义。