隱式類型轉換
隱式類型轉換會自動根據運算符進行類型轉換
- 轉成string類型: +(字符串連接符)字符相連,數(shù)值相加
alert("姑娘今年" + 18); //結果:姑娘今年18
alert("15"+5); //結果:155
- 轉成number類型
第一種:++/–(自增自減運算符)
第二種: - * / %(算術運算符)
第三種:> < >= <= == != === !=== (關系運算符)
alert("20"*"a"); //乘運算,結果為:NaN
alert("20"%"3"); //取模運算,結果為:2
var num1 = "6";
var num3 = "a";
alert(++num1); //將字符串轉換為數(shù)字再進行++運算,結果為:7
alert(++num3); //字符串無法轉換為數(shù)字,結果為:NaN
alert('10'>9); //將字符串轉換為數(shù)字,按值進行比較,結果為:true
- 轉成boolean類型:!(邏輯非運算符)
alert(!0); //對0取反,結果為:true
alert(!100); //對非0數(shù)字取反,結果為:false
alert(!"ok"); //對非空字符串取反,結果為:false
alert(!""); //對空字符串取反,結果為:true
強制類型轉換
JavaScript 可以自動根據運算的需要進行類型的轉換。強制類型轉換主要針對功能的需要或為了使代碼變得清晰易讀,人為地進行類型的轉換。在 JavaScript 中,強制類型轉換主要是通過調用全局函數(shù) Number()、parseInt() 和 parseFloat() 來實現(xiàn)。
- 用Number()函數(shù)將參數(shù)轉換為一個數(shù)字
Number(n)
Number() 對參數(shù) value 進行整體轉換,當參數(shù)值中任何地方包含了無法轉換為數(shù)字的符號時,轉換失敗,此時將返回 NaN,否則返回轉換后的數(shù)字
alert(Number("0010")); //去掉兩個前導0,結果為:10
alert(Number("+010")); //去掉前導0和+,結果為:10
alert(Number("-10")); //轉換后保留“-”號,結果為:-10
alert(Number('')); //空字符串的轉換結果為:0
alert(Number(true)); //布爾值true的轉換結果為:1
alert(Number(null)); //null值的轉換結果為:0
var d = new Date(); //創(chuàng)建一個Date對象
alert(Number(d)); //轉換Date對象,結果為1970.1.1至執(zhí)行轉換時的毫秒數(shù):1511351635179
alert(Number("100px")); //參數(shù)中包含了不能轉換為數(shù)字的字符px,結果為:NaN
alert(Number("100 01")); //參數(shù)中包含了空格,導致整個參數(shù)不能轉換,結果為:NaN
alert(Number("100-123")); //參數(shù)中包含了“-”,導致整個參數(shù)不能轉換,結果為:NaN
var a; //聲明變量
alert(Number(a)); //變量a沒有賦值,因而a的值為undefined,轉換undefined的結果為:NaN
var fn = function (){alert(1);}; //創(chuàng)建一個函數(shù)對象
alert(Number(fn)); //轉換函數(shù),結果為:NaN
alert(Number(window)); //轉換window對象,結果為:NaN
Number() 是從整體上進行轉換的,任何一個地方含有非法字符,都將導致轉換無法成功。
-
parseInt()函數(shù)將參數(shù)轉換為一個整數(shù)
圖片.png
parseInt() 的作用是將以 radix 為基數(shù)的 stringNum 字符串參數(shù)解析成十進制數(shù)。若 stringNum 字符串不是以合法的字符開頭,則返回 NaN;解析過程中如果遇到不合法的字符,將馬上停止解析,并返回已經解析的值。
注:parseInt() 解析浮點數(shù)時,小數(shù)部分數(shù)據會被截掉。
alert(parseInt("1101",2)); //以2為基數(shù)的1101字符串解析后的結果為:13
alert(parseInt("a37f",16)); //以16為基數(shù)的a37f字符串解析后的結果為:41855
alert(parseInt("123")); //以10為基數(shù)的123字符串解析后的結果為:123
alert(parseInt(" 123")); //字符串前面的空格會被忽略,結果為:123
alert(parseInt("12 3")); //字符串中包含了空格,解析到空格時停止,結果為12
alert(parseInt("12.345")); //字符串中包含了小數(shù)點,解析到小數(shù)點時停止,結果為12
alert(parseInt("xy123")); //字符串前面包含了非數(shù)字字符“x”,無法解析,返回結果為:NaN
alert(parseInt("123xy4")); //字符串中包含了非數(shù)字字符“xy”,解析到“x”時停止,結果為:123
- parseFloat()函數(shù)將參數(shù)轉換為一個浮點數(shù)
parseFloat(stringNum)
alert(parseFloat("312.456"));//結果為:312.456
alert(parseFloat("-3.12"));//字符串前面的“-”將保留,結果為:-3.12
alert(parseFloat("+3.12"));//字符串前面的“-”將保留,結果為:3.12
alert(parseFloat(".12"));//在小數(shù)點前面添加0,結果為:0.12
alert(parseFloat(" 3.12"));//截掉字符串前面的空格,結果為:3.12
alert(parseFloat("312.4A56"));//字符串中包含非數(shù)字字符A,解析到A時停止,結果為:312.4
alert(parseFloat("31 2.4A56"));//字符串中包含空格,解析到空格時停止,結果為:31
alert(parseFloat("31.2.5"));//字符串中包含兩個小數(shù)點,解析到第二個小數(shù)點時停止,結果為:31.2
alert(parseFloat("a312.456"));//字符串前面為非數(shù)字字符a,解析無法進行,結果為:NaN
- String(value)轉換數(shù)值或布爾值為字符
