JavaScript數(shù)據(jù)類型轉(zhuǎn)換——轉(zhuǎn)換成Number類型

一:使用Number()函數(shù)

字符串轉(zhuǎn)數(shù)字

  • 如果是純數(shù)字的字符串,則直接將其轉(zhuǎn)換為數(shù)字
    var str1 = "123";
    var res1 = Number(str1);
    console.log(res1); // 123
    console.log(typeof  res1); // number
  • 如果字符串中有非數(shù)字的內(nèi)容,則轉(zhuǎn)換為NaN
    var str2 = "123ab";
    var res2 = Number(str2);
    console.log(res2); // NaN
  • 注意點(diǎn):挖坑,數(shù)字字符串內(nèi)有 + - 是正負(fù)號(hào),會(huì)正常轉(zhuǎn)換,而不是NaN(詳情見運(yùn)算符章節(jié))
  var nums = "+100";
  var reses = Number(nums);
  console.log(reses);  //100
  var nums2 = "-100";
  reses2 = Number(nums2);
  console.log(reses2);  //-100
  • 如果字符串是一個(gè)空串或者是一個(gè)全是空格的字符串,則轉(zhuǎn)換為0
    var str3 = "";
    var res3 = Number(str3);
    console.log(res3); // 0

    var str4 = "    ";
    var res4 = Number(str4);
    console.log(res4); // 0

布爾轉(zhuǎn)數(shù)字

  • true轉(zhuǎn)換為1, false轉(zhuǎn)換為0
    var flag1 = true;
    var flag2 = false;
    // true --> 1
    var res3 = Number(flag1);
    console.log(res3);

    // false --> 0
    var res4 = Number(flag2);
    console.log(res4);

null轉(zhuǎn)數(shù)字

  • null轉(zhuǎn)換為0
   // null --> 0
    var n = null;
    var res5 = Number(n);
    console.log(res5);  //0
    var res05 = Number(null);
    console.log(res05);  //0

undefined轉(zhuǎn)數(shù)字

  • undefined轉(zhuǎn)換為NaN
    // NaN -- > Not a Number
    var u = undefined;
    var res6 = Number(u);
    console.log(res6);
  • 總結(jié):
    • 空字符串/false/null --> 0
    • 不僅僅包含數(shù)字的字符串和undefined --> 轉(zhuǎn)換為NaN
    • 其它的正常轉(zhuǎn)換

二:利用 + - 算數(shù)運(yùn)算符來轉(zhuǎn)換

  • 在需要轉(zhuǎn)換的類型前面加上+加號(hào)或者-減號(hào)即可
  • 注意點(diǎn):
    +加號(hào)不會(huì)改變數(shù)據(jù)的正負(fù)性
    -減號(hào)會(huì)改變數(shù)據(jù)的正負(fù)性
    var str1 = "123";
    var str2 = "3.14";
    var flag1 = true;
    var flag2 = false;
    var n = null;
    var u = undefined;

    var res1 = +str1;
    console.log(res1);  //123
    console.log(typeof res1);

    var res2 = -str1;
    console.log(res2);  //-123
    console.log(typeof res2);

    var res3 = +str2;
    console.log(res3);  //3.14

    var res4 = +flag1;
    console.log(res4);  //1

    var res5 = +flag2;
    console.log(res5);  //0

    var res6 = +n;
    console.log(res6);  //0

    var res7 = +u;
    console.log(res7);  //NaN

三:通過parseInt()/parseFloat()函數(shù)轉(zhuǎn)換

  • 通過Number函數(shù)或者通過+-運(yùn)算符轉(zhuǎn)換, 都不能轉(zhuǎn)換復(fù)雜的字符串,如"12px"
    var str1 = "12px";
    var res1 = Number(str1); // NaN
    console.log(res1);
    var res2 = +str1; // NaN
    console.log(res2);
  • 所以就有第三種轉(zhuǎn)換的方式, 通過parseInt()/parseFloat()函數(shù)提取數(shù)字
    • parseInt: 只能提取整數(shù)
    • 如果第一位不是有效數(shù)字, 什么都提取不到, 會(huì)返回NaN
    • 第一個(gè)參數(shù)是要轉(zhuǎn)換的字符串,第二個(gè)參數(shù)是要轉(zhuǎn)換的進(jìn)制
     var str1 = "3.14px";
     var res1 = parseInt(str1);
     console.log(res1);  //3
     console.log(typeof res1); //number
    
    • parseFloat:可以提取小數(shù)
    • 如果第一位不是有效數(shù)字, 什么都提取不到
    • 不支持第二個(gè)參數(shù),只能解析10進(jìn)制數(shù)
    • 如果解析的內(nèi)容里只有整數(shù),解析成整數(shù)
    var res2 = parseFloat(str1);
    console.log(res2);  //3.14
    console.log(typeof res2); //number
    
  • parseInt/parseFloat , 會(huì)從左至右的提取, 一旦被中斷后續(xù)的就提取不到了
    var str = "12px666px";
    var res1 = parseInt(str);
    console.log(res1);  //12
  • 對(duì)于parseFloat來說, 只能提取一個(gè).遇到第二個(gè).或者非數(shù)字結(jié)束
    var str = "3.14.15px";
    var res1 = parseFloat(str);
    console.log(res1);  //3.14
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容