一:使用Number()函數(shù)
字符串轉數(shù)字
- 如果是純數(shù)字的字符串歉胶,則直接將其轉換為數(shù)字
var str1 = "123";
var res1 = Number(str1);
console.log(res1); // 123
console.log(typeof res1); // number
- 如果字符串中有非數(shù)字的內(nèi)容冕象,則轉換為NaN
var str2 = "123ab";
var res2 = Number(str2);
console.log(res2); // NaN
- 注意點:挖坑,數(shù)字字符串內(nèi)有 + - 是正負號碘赖,會正常轉換,而不是NaN(詳情見運算符章節(jié))
var nums = "+100";
var reses = Number(nums);
console.log(reses); //100
var nums2 = "-100";
reses2 = Number(nums2);
console.log(reses2); //-100
- 如果字符串是一個空串或者是一個全是空格的字符串仲器,則轉換為0
var str3 = "";
var res3 = Number(str3);
console.log(res3); // 0
var str4 = " ";
var res4 = Number(str4);
console.log(res4); // 0
布爾轉數(shù)字
- true轉換為1, false轉換為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轉數(shù)字
- null轉換為0
// null --> 0
var n = null;
var res5 = Number(n);
console.log(res5); //0
var res05 = Number(null);
console.log(res05); //0
undefined轉數(shù)字
- undefined轉換為NaN
// NaN -- > Not a Number
var u = undefined;
var res6 = Number(u);
console.log(res6);
- 總結:
- 空字符串/false/null --> 0
- 不僅僅包含數(shù)字的字符串和undefined --> 轉換為NaN
- 其它的正常轉換
二:利用 + - 算數(shù)運算符來轉換
- 在需要轉換的類型前面加上+加號或者-減號即可
- 注意點:
+加號不會改變數(shù)據(jù)的正負性
-減號會改變數(shù)據(jù)的正負性
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ù)轉換
- 通過Number函數(shù)或者通過+-運算符轉換, 都不能轉換復雜的字符串,如"12px"
var str1 = "12px";
var res1 = Number(str1); // NaN
console.log(res1);
var res2 = +str1; // NaN
console.log(res2);
- 所以就有第三種轉換的方式, 通過parseInt()/parseFloat()函數(shù)提取數(shù)字
- parseInt: 只能提取整數(shù)
- 如果第一位不是有效數(shù)字, 什么都提取不到, 會返回NaN
- 第一個參數(shù)是要轉換的字符串仰冠,第二個參數(shù)是要轉換的進制
var str1 = "3.14px"; var res1 = parseInt(str1); console.log(res1); //3 console.log(typeof res1); //number
- parseFloat:可以提取小數(shù)
- 如果第一位不是有效數(shù)字, 什么都提取不到
- 不支持第二個參數(shù)乏冀,只能解析10進制數(shù)
- 如果解析的內(nèi)容里只有整數(shù),解析成整數(shù)
var res2 = parseFloat(str1); console.log(res2); //3.14 console.log(typeof res2); //number
- parseInt/parseFloat , 會從左至右的提取, 一旦被中斷后續(xù)的就提取不到了
var str = "12px666px";
var res1 = parseInt(str);
console.log(res1); //12
- 對于parseFloat來說, 只能提取一個.遇到第二個.或者非數(shù)字結束
var str = "3.14.15px";
var res1 = parseFloat(str);
console.log(res1); //3.14