在我們日常的開發當中經常會遇到一些型別轉換,有些是自己主動轉換,有些卻是不知不覺中就被轉換成了某種格式,這種隱式的轉換有些時候會給開發者帶來一些困擾。今天我就專門介紹一些自己了解的關於型別轉換的問題。
轉換為boolean型別:
主動轉換為boolean值可以通過呼叫boolean()函式進行轉換。boolean型別值只有true和false,其轉換規則如下:
1.轉換為true的情況:非空的字串,非零數值,任意物件。
2.轉換為false的情況:空字串,0以及nan,null,undefined。
轉換為number型別:
主動轉換為number可以通過呼叫number(),parseint(),parsefloat()三個函式進行轉換,轉換規則如下:
number():如果是布林值:那麼true轉換為1,false轉換為0;如果是null轉換為0;如果是undefined轉換為nan,如果是symbol值則丟擲錯誤,如果是字串分以下幾種情況:
字串為數字字串,即只有數字或者以正負號開頭的數字(「-20」,「+029」)
轉換為對應的十進位制數字
浮點數字串("-20.3", "+020.3")
轉換為對應的浮點值
字串為有效的16進製制字串,注意此時不可新增正負號("0x23ad")
轉換為對應的十進位制數字
空字串
轉換為0
其他情況
nan如果是物件的話需要經歷三個階段:1.呼叫物件的[symbol.toprimitive]方法,如果有該函式則呼叫並轉換其返回值,否則進行下一步(注意,此處只要可以訪問到就不會繼續往下走,如果返回物件本身則會報錯)。 2.呼叫物件的valueof()方法,如果返回結果不是物件本身,那麼對其進行轉換之後就不會繼續下一步,如果返回物件本身則進行下一步(此處《高程》上說是轉換結果是nan就會進行下一步,但是試驗後顯然不是這樣(下面有測試**))。3.呼叫物件的tostring()方法,進行轉換,返回最終的轉換結果
let obj = ,
tostring: function(),
}number(obj) // nan
轉換為string型別:
1.如果被轉換的值有tostring()方法的話就呼叫該方法進行轉換
2.如果值是null,則返回null
3.如果值是undefined,則返回undefined
隱式轉換的場景:
1.算術運算子。算術運算子一般情況下都會轉換為number型別。但是+運算子除外,該運算子在有字串的情況下會將運算的值全部轉換為string型別。
2.條件運算子。當使用if語句的時候if後面括號內的值如果不是boolean型別時會被轉換為boolean型別。
3.「==」不嚴格比較運算子。當使用==時如果兩側值的型別不一致時會按照一些規則進行型別轉換。
算術運算子轉換規則:
1.除加號以外的算術運算子都會將值轉換為數字進行計算,如果其中有值無法轉換 結果則為nan。如果為+號時則會將值都轉換為字串進行字串拼接。
2.條件運算子的轉換規則與顯式轉換一致
3."=="不嚴格比較運算子分以下幾種情況:
如果任一運算元時布林值,則將其轉換為數值進行處理
如果乙個操作符時字串另乙個是數值,則嘗試將其轉換為數值再進行比較
如果有乙個是物件則依次呼叫[symbol.toprimitive],valueof(),tostring()轉換為原始值進行比較
null和undefined相等
nan和任何值都不相等
如果兩個值都是物件則比較它們是不是同乙個物件,即兩值是否指向同乙個物件
如果是symbol值。通過symbol()建立的值不會和任何值(除了它本身)相等。通過symbol.for()建立的值,如果for的引數一致則代表兩個值相等。
let symbol1 = symbol("ss");
symbol1 == symbol1 // true;
symbol("ss") == symbol("ss") // false;
let symbol2 = symbol.for("mx");
let symbol3 = symbol.for("mx");
symbol2 == symbol3 // true
以上就是自己整理出來的一些關於型別轉換的一些知識點。本篇沒有記錄某些需要死記硬背的東西(比如說: == 0 返回true)。因為我認為只要理解這些背後的轉換規則,大部分關於轉換的問題都會迎刃而解。也希望自己記錄的這些可以給各位帶來一些幫助。
求點贊&三連呀?
C 的型別轉換詳細介紹
c 的型別轉換詳細介紹 1 型別轉換名稱和語法 c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。static cast 靜態型別轉換。如int轉換成char reinterpret...
關於js的型別轉換?
boolean 除了 undefined,null,0,0,nan,false,之外 都轉換為true,包括所有物件!物件在轉換 是呼叫 symbol.toprimitive 方法來進行轉換 運算中 一方 為字串的話,會將另一方也轉換為字串 如果一方不是字串或者數字的話,會將另一方轉換成數字或者字串...
關於js型別轉換
string三種方法轉換 使用tostring 方法 呼叫被轉換資料的tostring 方法,就可以將其他型別轉換為string 而且該方法不會影響原變數,它會將結果返回 但是要注意,null和undefined這兩個值沒有tostring 方法 如果使用,會報錯。呼叫string 函式 strin...