常用js型別轉換方法淺析
1、其他型別轉為 number:
1、parseFloat
parseFloat:接受一個引數,將字串轉換為數字型別,如果是引用型別(null除外),會先進行toString(),然後對返回字串進行轉換處理。例子如下:
parseFloat({age:18}) //NaN,因為{age:18}呼叫toString結果為"[object Object]"
parseFloat([18,22]) //18,因為[18,22].toString() =>'18,22'
parseFloat('18.22safsa') // 18.22
2、parseInt
parseInt(string,radix)接受兩個引數,string位需要轉換的字串,radix為解析的基數(即原來字串的進位制)(radix大於2小於36),將字串轉換為數字型別,如果是引用型別(null除外),會先進行toString(),然後對返回字串進行轉換處理。例子如下:
parseInt('132.22sdfa') // 132
parseInt('ff') // NaN
parseInt('ff',16) //256,FF在16進制中為15,是數字。
parseInt(33,0) // 33
parseInt(33,1)或parseInt(33,2) // NaN 因為2進制中沒有3
3、Number
Number:將字串轉換為數字,要求比較嚴格,只要存在非數字即為NaN
Number('5s') // NaN
Number('5.111') // 5.111
Number(undefined) //NaN
Number(null) // 0
4、位運算的妙用
用位運算子(~~、>>0、<<0)來“取整”會有一些問題,一般情況不推薦使用;位運算畢竟是操作符,效率要高一些,如果這個“取整”操作是影響效能的關鍵操作,並且你知道被運算元不會超出精度限制的情況,可以考慮用位運算
[] >> 0 // 0
'454sdfs' >> 0 //0
455.545 >> 0 // 455
//任何使用Number轉換結果為NaN的值,使用位操作符取整均為0;
5、利用+運算子
+會進行隱式轉換,能將各種型別的資料轉換為數字
+'123' //123
+'123ds' // NaN
+{} //NaN
+[] // 0
+new Date() // 相當於new Date().getTime()
+new RegExp()//NaN
6、利用-運算子
'123'-0 // 123
'123sd'-0 //NaN
以上最常用的就是+隱式轉換和位運算子。圖個方便
2、其他型別轉為 string:
1、String
:String 將其他型別轉換為字串;(推薦使用),容錯率超高,不會導致程式程序死掉
String({age:18}) // "[object Object]"
String([18,88,99]) // "18,88,99"
String(Symbol('some')) // 'Symbol(some)'
2、toString
toString,本人不喜歡用,容錯率低,一不留神就給你來個bug;導致程序掛掉。
1、將一個邏輯值轉換為字串,將其他格式轉換為字串
2、將數值轉換為對應的進位制,然後轉換為字串
一般用法:some.toString(radix);引數radix表示需要轉換成對應的進位制;一般預設為10;
'123sdf'.toString(2) // '123sdf'
Number(888).toString(2) // '1101111000'
'888'.toString(2) // '888'
[18,22].toString() // '18,22'
Object({age:18}).toString() // "[object Object]"
與String 的不同之處:toString會對數字先進行進位制轉換;以及 null.toString() 、 undefined.toString()會報錯;
如果需要轉換的值是又後臺傳回,或具有不確定因素時,不建議使用toString。
3、與”相加
數字與字串相加,結果將會為字串,加法運算中,{age:18}將會轉換成0;
123+'' // '123'
{age:18}+'' // 0
[18,22]+'' // '18,22'
undefined+'' // 'undefined'
null+'' // 'null'
function fn(){} +'' // 0
var fn = function(){}; fn+'' // 'function(){}'