js中強制類型轉換和隱式類型轉換

隱式類型轉換

隱式類型轉換會自動根據運算符進行類型轉換

  • 轉成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ù)值或布爾值為字符
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容