了解JavaScript中的五種基本數(shù)據(jù)類型與類型之間的轉換
首先我們先來了解下五種基本類型都有哪些
基本數(shù)據(jù)類型: string number Boolean null undefined
1. 字符串 String
????????????var a = '內(nèi)容';
? ????? ????var a = "內(nèi)容";
字符串特點:
????????字符串一旦創(chuàng)建,它們的值不能改變, (要改變的話:先銷毀原來的字符串,再使用新的字符串填? ? ? ? ?充變量)
2. 數(shù)字? Number
? ? ????var a = 1;
? ? ????var b = 124;
? ? (1)數(shù)字有整數(shù),浮點數(shù);
? ? ? ? ? ? ? ? ?所謂的浮點數(shù)值,就是該數(shù)值中必須包含一個小數(shù)點,并且小數(shù)點后必須至少有一位數(shù)字
????????????????由于保存浮點數(shù)值需要的內(nèi)存空間是保存整數(shù)值的兩倍,因此ECMAScript會不失時機地將浮點? ? ? ? ? ? ?數(shù)值轉換為整數(shù)值
????????????????????????1. =》1
????????????????????????10.0 =》? ? ? ? 10
? ? (2)范圍從負無窮(-Infinity)到0 到正無窮(+Infinity);
? ? ? ? ? ? ? ?* Infinity是無法參與計算的;
? ? ? ? ? ? ? ?* 判斷值是否超過JavaScript數(shù)值范圍可以使用:
????????????????????isFinite(num)
? ? ?(3)?NaN :即非數(shù)值(Not a Number)是一個特殊的數(shù)值;
? ? ? ? ? ? ? ? ?* NaN指的"不是一個數(shù)字",可以理解為"無效數(shù)值","失敗數(shù)值", "壞數(shù)值";
? ? ? ? ? ? ? ? ?* 用于指出數(shù)字類型中錯誤的情況:執(zhí)行數(shù)學運算沒有成功,這是失敗后返回的結果;
? ? ? ? ? ? ? ? ?* 任何涉及NaN的操作都會返回NaN;
? ? ? ? ? ? ? ? ?* NaN與任何值都不相等;
? ? ? ? ? ? ? ? ?*?判斷是否"不是數(shù)值",參數(shù)為任意類型:?isNaN();
3. 布爾? Boolean
? ? ????var a = true;
? ? ????var a = false;
????只有兩個字面值: true 和 false
????在ECMAScript中所有的類型的值都有與這兩個Boolean值等價的值
4. null? 空
? ? ????var a = null;
? ? ????空對象指針? ? ? 準備給對象用的坑
????????null表示準備用來保存對象,還沒有真正保存對象的值
? ? ? ? typeof檢測null時會返回? ? ? "object" :
????????最初在JavaScript最初實現(xiàn)中,JavaScript的值是由一個表示類型的標簽和實際數(shù)值來表示的, 對象的類型標簽是0,由于null代表的空指針,因此null的類型標簽也成為了0,typeofnull就返回了object
5. undefined? 未定義;
? ? ????var a = undefined;
? ? ????var a;
? ? ????準備給基本數(shù)據(jù)類型用的坑
????????只有一個值,在使用var聲明變量但還沒有加以初始化賦值時,這個變量的值就是undefined
類型的轉換
? ? (1) 轉字符串:
? ??????????????String(變量):
????????????????????null與undefined可使用這個轉型函數(shù)
var str = 'abc';var num = 234;var bool = true;var un = undefined;var nu = null;
console.log(String(num)); // '234'
console.log(String(bool)); // 'true'
console.log(String(un)); // 'undefined'
console.log(String(nu)); // 'null'
????????????????變量.toString(2 || 8 || 10 || 16)
? ? ? ? ? ? ? ? ? 參數(shù)是基數(shù)(幾進制);數(shù)值、布爾值、對象和字符串都有這個方法,null與undefined則沒有
? ? ? ? ? ?數(shù)字轉為字符串的特殊方法:
? ??????????????數(shù)字.toFixed(位數(shù))
? ??????????????????????保留小數(shù)點后幾位,并采取四舍五入
? (2) 轉數(shù)字:
? ? ? ? ? ? ?*? ?Number()
? ? ? ? ? ? ? ? ? ? 布爾值:? ?true - 1; ????false - 0;
var bool = true;
console.log(Number(bool)); ????//1
var bool = false;
console.log(Number(bool));???? //0
? ??????????????????Null:? 0
var nu = null;
console.log(Number(nu)); ????//0
? ??????????????????Undefined:? NaN
var un = undefined;
console.log(Number(un)); ???? //NaN
? ? ? ? ? ? ? ? ? ? 字符串:
????????????????????????????只包含數(shù)字(前面攜帶正負號)
????????????????????????????前導零會被忽略
????????????????????????????識別浮點、整數(shù)、16進制(自動轉為同等大小的十進制數(shù)值)
????????????????????????????空字符串? - 0
????????????????????????????除上述之外 均為NaN
var c = Number('1前端'); ???? // NaN;
var c = Number('1'); ???? // 1;
var c = Number('前端1'); ???? // NaN;
? ? ? ? ? ? ? *? parseInt()? ?轉為整數(shù)
? ??????????????????????忽略字符串前面的空格,直至找到第一個非空字符,
????????????????????????如果第一個字符不是數(shù)字字符或者正負號? ? ? ? ? 返回 NaN
????????????????????????如果第一個字符是數(shù)字字符,parseInt會繼續(xù)解析第二個字符,知道解析完所有后續(xù)字符? ? ? ? ? ? ? ? ? ? ? ? 或者遇到了一個非數(shù)字字符
????????????????????????字符串以'0x'開頭且后跟數(shù)字字符,就會將其當作一個十六進制整數(shù)
????????????????????????字符串以'0'開頭且后跟數(shù)字字符,則會將其當作一個八進制數(shù)來解析
? ? ? ? ? ? ? ? ? ? ? ? 空字符串 返回 NaN
????????????????????????提供第二個參數(shù):轉換時使用的基數(shù)(進制)
var a = parseInt('123.9前端'); ???? //? 123;
var a = parseInt('前端123'); ????//? NaN;
? ? ? ? ? ? *????parseFloat()? ?轉為浮點數(shù)
? ??????????????????????第一個小數(shù)點是有效的,第二個小數(shù)點是無效的
????????????????????????只解析十進制,無第二個參數(shù)
????????????????????????十六進制式的字符串始終被轉換為 0
var b = parseFloat('1239前端'); ????//? 1239;
var b = parseFloat('1.9前端'); ????//? 1.9;
var b = parseFloat('前端1.9'); ????// NaN;
? (3) 轉布爾值:
? ? ? ? ? ? ? ? Boolean()
? ? ? ? ? ? ? ? ? ? ? 0,空字符串,NaN, undefined ,null 轉布爾都為false
基本類型之間的轉換是一個重點,一定要記清楚:
JavaScript是一種弱類型語言,其中的數(shù)據(jù)類型在不同情況下會發(fā)生隱性的轉換,如果不清楚類型的轉換,可能之后的代碼報錯都找不到原因。