JS类型转换&五个falsy值

342 阅读3分钟

已知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把他们变成数值并无意义。