JavaScript中的類型有:
- 原始類型:Boolean、Null、String、Number、Symbol、Undefined、BigInt
- 對象:Object
一、顯式類型轉(zhuǎn)換
-
Number函數(shù)
- 原始類型轉(zhuǎn)換
數(shù)值:轉(zhuǎn)換后還是原來的值
字符串:如果可以被解析為數(shù)值,則轉(zhuǎn)換為相應(yīng)的數(shù)值,否則得到NaN;空字符串轉(zhuǎn)為0
布爾值:true轉(zhuǎn)為1,false轉(zhuǎn)為0
undefined:轉(zhuǎn)為NaN
null:轉(zhuǎn)為0 - 對象類型轉(zhuǎn)換
先調(diào)用對象自身的valueOf方法,如果該方法返回原始類型的值(數(shù)值、字符串和布爾值),則直接對該值使用Number方法,不再進行后續(xù)步驟。
如果valueOf返回的是復(fù)合類型的值,再調(diào)用對象自身的toString方法,如果toString方法返回原始類型的值,則對該值使用Number方法,不再進行后續(xù)步驟。
如果toString方法返回的是復(fù)合類型的值,則報錯。
- 原始類型轉(zhuǎn)換
-
String函數(shù)
- 原始類型轉(zhuǎn)換
數(shù)值:轉(zhuǎn)換為相應(yīng)的字符串
字符串:轉(zhuǎn)換后還是原來的值
布爾值:true轉(zhuǎn)為"true",false轉(zhuǎn)為"false"
undefined:轉(zhuǎn)為"undefined"
null:轉(zhuǎn)為"null" - 對象類型轉(zhuǎn)換
先調(diào)用toString方法,如果該方法返回原始類型的值,則直接對該值使用String方法,不再進行后續(xù)步驟。
如果toString方法返回的是復(fù)合類型的值,再調(diào)用valueOf方法,如果valueOf方法返回原始類型的值,則對該值使用String方法,不再進行后續(xù)步驟。
如果valueOf方法返回的是復(fù)合類型的值,則報錯。
- 原始類型轉(zhuǎn)換
-
Boolean函數(shù)
undefined、null、0、NaN、''(空字符串)轉(zhuǎn)換為false
其他的都為true
二、隱式類型轉(zhuǎn)換
- 以下情況會發(fā)生類型轉(zhuǎn)換
四則元素(加減乘除)
判斷語句
Native調(diào)用(console.log()、alert()等會自動將內(nèi)容轉(zhuǎn)換為String類型)
[] + [] // ''
[] + {} // '[object Object]'
{} + [] //0
{} + {} //'[object Object][object Object]'
true + true //2
1 + {a: 1} //'1[object Object]'
相關(guān)資料:
https://2ality.com/2012/01/object-plus-object.html