JavaScript 類型轉(zhuǎn)換
Javascript的變量是松散類型的,它可以存儲(chǔ)Javascript支持的任何數(shù)據(jù)類型,其變量的類型可以在運(yùn)行時(shí)被動(dòng)態(tài)改變。請(qǐng)看示例:
var?n = 10;
n = "hello CSSer!";
n = {};
上面的示例中,首先聲明n變量并初始化其值為10(整數(shù)類型),接著將字符串“hello?CSSer!”賦值給n,接著再賦一個(gè)對(duì)象給它,最后n的類型是對(duì)象類型??梢钥闯鲎兞縩的類型具有動(dòng)態(tài)性,實(shí)際編程中,我們建議不要頻繁改變變量的類型,因?yàn)檫@對(duì)調(diào)試沒(méi)有好處。
JavaScript 數(shù)據(jù)類型
在 JavaScript 中有 5 種不同的數(shù)據(jù)類型:
string
number
boolean
object
function
3 種對(duì)象類型:
Object
Date
Array
2 個(gè)不包含任何值的數(shù)據(jù)類型:
null
undefined
typeof 操作符
你可以使用?typeof?操作符來(lái)查看 JavaScript 變量的數(shù)據(jù)類型。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php.cn</title> </head> <body> <p id="demo"></p> <script> document.getElementById("demo").innerHTML = typeof "tom" + "<br>" + typeof 3.14 + "<br>" + typeof NaN + "<br>" + typeof false + "<br>" + typeof [1,2,3,4] + "<br>" + typeof {name:'john', age:34} + "<br>" + typeof new Date() + "<br>" + typeof function () {} + "<br>" + typeof myCar + "<br>" + typeof null; </script> </body> </html>
請(qǐng)注意:
NaN 的數(shù)據(jù)類型是 number
數(shù)組(Array)的數(shù)據(jù)類型是 object
日期(Date)的數(shù)據(jù)類型為 object
null 的數(shù)據(jù)類型是 object
未定義變量的數(shù)據(jù)類型為 undefined
constructor 屬性
constructor?屬性返回所有 JavaScript 變量的構(gòu)造函數(shù)。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php.cn</title> </head> <body> <p id="demo"></p> <script> document.getElementById("demo").innerHTML = "john".constructor + "<br>" + (3.14).constructor + "<br>" + false.constructor + "<br>" + [1,2,3,4].constructor + "<br>" + {name:'john', age:34}.constructor + "<br>" + new Date().constructor + "<br>" + function () {}.constructor; </script> </body> </html>
? ?
顯式轉(zhuǎn)換
通過(guò)手動(dòng)進(jìn)行類型轉(zhuǎn)換,Javascript提供了以下轉(zhuǎn)型函數(shù):
轉(zhuǎn)換為數(shù)值類型:Number(mix)、parseInt(string,radix)、parseFloat(string)
轉(zhuǎn)換為字符串類型:toString(radix)、String(mix)
轉(zhuǎn)換為布爾類型:Boolean(mix)
1、Number(mix)函數(shù),可以將任意類型的參數(shù)mix轉(zhuǎn)換為數(shù)值類型
其規(guī)則為:
如果是布爾值,true和false分別被轉(zhuǎn)換為1和0
如果是數(shù)字值,返回本身。
如果是null,返回0.
如果是undefined,返回NaN。
如果是字符串,遵循以下規(guī)則:
1)如果字符串中只包含數(shù)字,則將其轉(zhuǎn)換為十進(jìn)制(忽略前導(dǎo)0)
2)如果字符串中包含有效的浮點(diǎn)格式,將其轉(zhuǎn)換為浮點(diǎn)數(shù)值(忽略前導(dǎo)0)
3)如果是空字符串,將其轉(zhuǎn)換為0
4)如果字符串中包含非以上格式,則將其轉(zhuǎn)換為NaN
如果是對(duì)象,則調(diào)用對(duì)象的valueOf()方法,然后依據(jù)前面的規(guī)則轉(zhuǎn)換返回的值。如果轉(zhuǎn)換的結(jié)果是NaN,則調(diào)用對(duì)象的toString()方法,再次依照前面的規(guī)則轉(zhuǎn)換返回的字符串值。
Number("3.14")????// 返回 3.14
Number(" ")???????// 返回 0?
Number("")????????// 返回 0
Number("99 88")???// 返回 NaN
2、parseInt(string,?radix)函數(shù),將字符串轉(zhuǎn)換為整數(shù)類型的數(shù)值。它也有一定的規(guī)則:
忽略字符串前面的空格,直至找到第一個(gè)非空字符
如果第一個(gè)字符不是數(shù)字符號(hào)或者負(fù)號(hào),返回NaN
如果第一個(gè)字符是數(shù)字,則繼續(xù)解析直至字符串解析完畢或者遇到一個(gè)非數(shù)字符號(hào)為止
如果上步解析的結(jié)果以0開頭,則將其當(dāng)作八進(jìn)制來(lái)解析;如果以0x開頭,則將其當(dāng)作十六進(jìn)制來(lái)解析
如果指定radix參數(shù),則以radix為基數(shù)進(jìn)行解析
3、parseFloat(string)函數(shù),將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)類型的數(shù)值
它的規(guī)則與parseInt基本相同,但也有點(diǎn)區(qū)別:字符串中第一個(gè)小數(shù)點(diǎn)符號(hào)是有效的,另外parseFloat會(huì)忽略所有前導(dǎo)0,如果字符串包含一個(gè)可解析為整數(shù)的數(shù),則返回整數(shù)值而不是浮點(diǎn)數(shù)值。
4、toString(radix)方法。除undefined和null之外的所有類型的值都具有toString()方法,其作用是返回對(duì)象的字符串表示
對(duì)象 ? ?操作 ? ?
Array ? ?將?Array?的元素轉(zhuǎn)換為字符串。結(jié)果字符串由逗號(hào)分隔,且連接起來(lái)。 ? ?
Boolean ? ?如果?Boolean?值是?true,則返回?“true”。否則,返回?“false”。 ? ?
Date ? ?返回日期的文字表示法。 ? ?
Error ? ?返回一個(gè)包含相關(guān)錯(cuò)誤信息的字符串。 ? ?
Function ? ?返回如下格式的字符串,其中?functionname?是被調(diào)用?toString?方法函數(shù)的名稱:
function?functionname(?)?{?[native?code]?}
Number ? ?返回?cái)?shù)字的文字表示。 ? ?
String ? ?返回?String?對(duì)象的值。 ? ?
默認(rèn) ? ?返回?“[object?objectname]”,其中?objectname?是對(duì)象類型的名稱。 ? ?
5、String(mix)函數(shù),將任何類型的值轉(zhuǎn)換為字符串,其規(guī)則為:
如果有toString()方法,則調(diào)用該方法(不傳遞radix參數(shù))并返回結(jié)果
如果是null,返回”null”
如果是undefined,返回”undefined”
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php.cn</title> </head> <body> <p id="demo"></p> <script> var x = 55; document.getElementById("demo").innerHTML = String(x) + "<br>" + String(13.3) + "<br>" + String(100.99 + 23); </script> </body> </html>
6、Boolean(mix)函數(shù),將任何類型的值轉(zhuǎn)換為布爾值。
以下值會(huì)被轉(zhuǎn)換為false:false、”"、0、NaN、null、undefined,其余任何值都會(huì)被轉(zhuǎn)換為true。
實(shí)例:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> <script type="text/javascript"> var i="123abc"; i=parseInt(i);//字符串轉(zhuǎn)整形 alert(i+","+typeof(i));//輸出:123,number i="12.3abc"; i=parseFloat(i);//字符串轉(zhuǎn)浮點(diǎn)型 alert(i+","+typeof(i));//輸出:12.3,number(可見不管是int還是float都是number類型) i="a123abc"; i=parseInt(i);//字符串轉(zhuǎn)整形 alert(i+","+typeof(i));//輸出:NaN,number (由于轉(zhuǎn)換失敗,所以提示“不是一個(gè)數(shù)字,Not a Number”) var num=document.getElementById("num").value; function showMsg(num) { for(var i=0;i<num;i++) { document.write("你好,JavaScript!<br/>"); } } </script> </head> <body> </body> </html>
一元運(yùn)算符 +
Operator +?可用于將變量轉(zhuǎn)換為數(shù)字:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php.cn</title> </head> <body> <button onclick="myFunction()">點(diǎn)擊</button> <p id="demo"></p> <script> function myFunction() { var y = "5"; var x = + y; document.getElementById("demo").innerHTML = typeof y + "<br>" + typeof x; } </script> </body> </html>