標籤:blog def parse int st3 傳回值 eof amp css
註:JavaScript相對於其他強型別(如c,c++,java,定義變數的同時申明變數類型)語言來說,是弱類型和鬆散型(在定義的時候不需要申明變數類型,在使用的時候才賦值給她什麼類型就是什麼類型。所以,JavaScript中的變數類型也是動態改變的)。
var n=88; //首先定義變數n,並初始化為88(整數型)n="Hello World!"; //此時,變數被賦值一串字元,自然變數n為(字串型)n={}; //此時,變數被賦值為對象,自然變數n為(對象型)
注意:在實際開發中,不建議頻繁動態改變變數類型
一、顯式轉換
1.ParseInt(string,radix)其中:string是必填參數(被轉換字串);radix基數用來限制想要轉的進位數(2~36之間),若radix省略或為0(表示十進位),若“OX”或“Ox”則為十六進位,超出2~36則返回NAN(非數值Not a Number)。
parseInt("hello CSSer!"); //NaNparseInt("0x8"); //8parseInt(""); //NaNparseInt("020dd"); //20parseInt("070"); //70parseInt("22.5"); //22
2.Number(string)若參數是Date對象,則返回至今的毫秒數;若參數無法轉換為數字,則返回NaN。
<script type="text/javascript">var test1= new Boolean(true); //若為布爾值true,則返回1var test2= new Boolean(false); //若為布爾值false,則返回0var test3= new Date(); //若為Date對象,則返回至今的毫秒數var test4= new String("999"); //若為只包含數位字串,則返回數字本身var test5= new String("999 888"); //若字串中包含空格等,則返回NaN
var test6= new String(""); //若為空白(null),則返回0document.write(Number(test1)+ "<br />");document.write(Number(test2)+ "<br />");document.write(Number(test3)+ "<br />");document.write(Number(test4)+ "<br />");document.write(Number(test5)+ "<br />");
document.write(Number(test6)+ "<br />");</script>輸出結果:101256657776588999NaN
0
3.ParseFloat()將字串轉換為浮點數類型。
parseFloat 將它的字串參數解析成為浮點數並返回。如果在解析過程中遇到了加號或減號(+ 或 -)、數字 (0-9)、小數點,或者科學記號標記法中的指數(e 或 E)以外的字元,則它會忽略該字元以及之後的所有字元,返回當前已經解析到的浮點數。同時參數字串首位的空白符會被忽略。
如果參數字串的第一個字元不能被解析成為數字,則 parseFloat 返回 NaN。
注釋:開頭和結尾的空格是允許的。
提示:如果字串的第一個字元不能被轉換為數字,那麼 parseFloat() 會返回 NaN。
4.toString() 方法可把一個 Number 對象轉換為一個字串,並返回結果。
文法:NumberObject.toString(radix)。
radix可選。規定表示數位基數,使 2 ~ 36 之間的整數。若省略該參數,則使用基數 10。但是要注意,如果該參數是 10 以外的其他值,則 ECMAScript 標準允許實現返回任意值。
<script type="text/javascript">var number = new Number(1337);document.write (number.toString())</script>輸出:1337
二、隱式轉換
在某些情況下,即使我們不提供顯示轉換,Javascript也會進行自動類型轉換,主要情況有:
1. 用於檢測是否為非數值的函數:isNaN(mix)
isNaN()函數,經測試發現,該函數會嘗試將參數值用Number()進行轉換,如果結果為“非數值”則返回true,否則返回false。
2. 遞增遞減操作符(包括前置和後置)、一元正負符號操作符
這些操作符適用於任何資料類型的值,針對不同類型的值,該操作符遵循以下規則(經過對比發現,其規則與Number()規則基本相同):
1.如果是包含有效數字字元的字串,先將其轉換為數字值(轉換規則同Number()),在執行加減1的操作,字串變數變為數值變數。
2.如果是不包含有效數字字元的字串,將變數的值設定為NaN,字串變數變成數值變數。
3.如果是布爾值false,先將其轉換為0再執行加減1的操作,布爾值變數編程數值變數。
4.如果是布爾值true,先將其轉換為1再執行加減1的操作,布爾值變數變成數值變數。
5.如果是浮點數值,執行加減1的操作。
6.如果是對象,先調用對象的valueOf()方法,然後對該傳回值應用前面的規則。如果結果是NaN,則調用toString()方法後再應用前面的規則。物件變數變成數值變數。
小測驗:
分別對以下類型的值執行後置遞增操作,結果是什嗎?
“2″, ”02dd”, ”", false, 22.5, +”", -false, +new Date()
3. 加法運算操作符
加號運算操作符在Javascript也用於字串串連符,所以加號操作符的規則分兩種情況:
?如果兩個操作值都是數值,其規則為:
1.如果一個運算元為NaN,則結果為NaN
2.如果是Infinity+Infinity,結果是Infinity
3.如果是-Infinity+(-Infinity),結果是-Infinity
4.如果是Infinity+(-Infinity),結果是NaN
5.如果是+0+(+0),結果為+0
6.如果是(-0)+(-0),結果為-0
7.如果是(+0)+(-0),結果為+0
?如果有一個操作值為字串,則:
1.如果兩個操作值都是字串,則將它們拼接起來
2.如果只有一個操作值為字串,則將另外操作值轉換為字串,然後拼接起來
3.如果一個運算元是對象、數值或者布爾值,則調用toString()方法取得字串值,然後再應用前面的字串規則。對於
undefined和null,分別調用String()顯式轉換為字串。
可以看出,加法運算中,如果有一個操作值為字串類型,則將另一個操作值轉換為字串,最後串連起來。
4. 乘除、減號運算子、模數運算子
這些操作符針對的是運算,所以他們具有共同性:如果操作值之一不是數值,則被隱式調用Number()函數進行轉換。具體每一種運算的詳細規則請參考ECMAScript中的定義。
5. 邏輯操作符(!、&&、||)
邏輯非(!)操作符首先通過Boolean()函數將它的操作值轉換為布爾值,然後求反。
邏輯與(&&)操作符,如果一個操作值不是布爾值時,遵循以下規則進行轉換:
1.如果第一個運算元經Boolean()轉換後為true,則返回第二個操作值,否則返回第一個值(不是Boolean()轉換後的值)
2.如果有一個操作值為null,返回null
3.如果有一個操作值為NaN,返回NaN
4.如果有一個操作值為undefined,返回undefined
邏輯或(||)操作符,如果一個操作值不是布爾值,遵循以下規則:
1.如果第一個操作值經Boolean()轉換後為false,則返回第二個操作值,否則返回第一個操作值(不是Boolean()轉換後的值)
2.對於undefined、null和NaN的處理規則與邏輯與(&&)相同
6. 關係操作符(<, >, <=, >=)
與上述操作符一樣,關係操作符的操作值也可以是任意類型的,所以使用非數實值型別參與比較時也需要系統進行隱式類型轉換:
1.如果兩個操作值都是數值,則進行數值比較
2.如果兩個操作值都是字串,則比較字串對應的字元編碼值
3.如果只有一個操作值是數值,則將另一個操作值轉換為數值,進行數值比較
4.如果一個運算元是對象,則調用valueOf()方法(如果對象沒有valueOf()方法則調用toString()方法),得到的結果按照前面的
規則執行比較
5.如果一個操作值是布爾值,則將其轉換為數值,再進行比較
註:NaN是非常特殊的值,它不和任何類型的值相等,包括它自己,同時它與任何類型的值比較大小時都返回false。
7. 相等操作符(==)
相等操作符會對操作值進行隱式轉換後進行比較:
1.如果一個操作值為布爾值,則在比較之前先將其轉換為數值
2.如果一個操作值為字串,另一個操作值為數值,則通過Number()函數將字串轉換為數值
3.如果一個操作值是對象,另一個不是,則調用對象的valueOf()方法,得到的結果按照前面的規則進行比較
4.null與undefined是相等的
5.如果一個操作值為NaN,則相等比較返回false
6.如果兩個操作值都是對象,則比較它們是不是指向同一個對象
JavaScript類型轉換規則