-基本數(shù)據(jù)類型:結(jié)構(gòu)簡(jiǎn)單,存儲(chǔ)在棧內(nèi)存里面,操作的是值
①,’字符串 string :?'' "" 'a' "a" 'asdfdf'
??? 字符串天生自帶一個(gè)length屬性,表示字符串長(zhǎng)度(字符個(gè)數(shù))
??? 通過(guò)字符串的索引值(下標(biāo))可以訪問(wèn)字符串中指定字符 索引值范圍:0 - (length-1)
? ? var str = 'hello world!';
? ? console.log(str.length); //12
? ? console.log(str[0]);? //'h'
②,數(shù)字 number : 正數(shù) 負(fù)數(shù) 小數(shù)?NaN(not a number)
??? js小數(shù)之間運(yùn)算會(huì)有精度損失,一般應(yīng)當(dāng)避免小數(shù)之間直接運(yùn)算
? ? console.log(0.1+0.3); //? 0.30000000000004
??? NaN:(非數(shù)值):任何涉及NaN的操作都會(huì)返回NaN,NaN與任何值都不相等,包括其本身,他是數(shù)字類型
③,布爾 boolean :?true真?false假
④,null 空
1、null值表示一個(gè)空對(duì)象指針
2、如果定義的變量準(zhǔn)備在將來(lái)用于保存對(duì)象,那么最好將改變量初始化為null而不是其他值。
⑤,undefined 未定義(未初始化)
說(shuō)明:undefined值是派生自null值的,所以u(píng)ndefined==null的返回結(jié)果是true。
2-引用數(shù)據(jù)類型:結(jié)構(gòu)復(fù)雜,存儲(chǔ)在堆內(nèi)存里面,操作的是地址
對(duì)象 object?{ key1:val,key2:val}?{}空對(duì)象
數(shù)組 array?[1,2,3,'aaa']?[]空數(shù)組
數(shù)組天生自帶一個(gè)length屬性,表示數(shù)組長(zhǎng)度
通過(guò)數(shù)組的索引值(下標(biāo))可以訪問(wèn)數(shù)組中的一項(xiàng) 索引值范圍:0 - (length-1)
? ? var ary = [2,3,4,5];
? ? console.log(ary.length);? //4
? ? console.log(ary[0]); //2
正則 regExp?/^1$/
函數(shù) function?function(){ }
(二) 檢測(cè)數(shù)據(jù)類型
1-typeof 通常用來(lái)檢測(cè)基本數(shù)據(jù)類型
? null 檢測(cè)出來(lái)結(jié)果是object , 因?yàn)閚ull在js中被定義為一個(gè)空對(duì)象的引用
? []?,?{}?,/123/?檢測(cè)結(jié)果都是object
? console.log( typeof true);? //boolean
? console.log( typeof undefined);? //undefined
? console.log( typeof function(){});? //function
2-instanceof 通常用來(lái)檢測(cè)引用數(shù)據(jù)類型,判斷某個(gè)對(duì)象是否屬于某個(gè)類的實(shí)例
? console.log([] instanceof Array);? //true
? console.log(/123/ instanceof RegExp); //true
(三) 數(shù)據(jù)類型轉(zhuǎn)換
1- isNaN() 檢測(cè)一個(gè)值是否不是一個(gè)有效數(shù)字 , 是數(shù)字返回false,不是數(shù)字為true
對(duì)接收的數(shù)值,先嘗試轉(zhuǎn)換為數(shù)值,在檢測(cè)是否為非數(shù)值(隱式調(diào)用Number()方法把值轉(zhuǎn)換成number類型再判斷)
console.log(isNaN('12')); //false
console.log(isNaN(true));? //false
2- Number(); 強(qiáng)制轉(zhuǎn)換成number類型
?? Number( )可以用于任何數(shù)據(jù)類型,如果是轉(zhuǎn)換不了的話,就會(huì)是NaN
? ? console.log(Number(false));? //0
? ? console.log(Number(null));? //0
? ? console.log(Number([12]));? //12
3- parseInt(); 轉(zhuǎn)換成整型的數(shù)字?
從左到右查找數(shù)字,直到碰到非數(shù)字就停止查找,把已經(jīng)找到的數(shù)字返回
parseInt()方法首先查看位置0處的 字符,判斷它是否是個(gè)有效數(shù)字;如果不是,該方法將返回NaN,不再繼續(xù)執(zhí)行其他操作。但如果該字符是有效數(shù)字,該方法將查看位置1處的字符,進(jìn)行同樣的 測(cè)試。這一過(guò)程將持續(xù)到發(fā)現(xiàn)非有效數(shù)字的字符為止,此時(shí)parseInt()將把該字符之前的字符串轉(zhuǎn)換成數(shù)字。例如如果要把字符串 "1234blue "轉(zhuǎn)換成整數(shù),那么parseInt()將返回1234,因?yàn)楫?dāng)它檢測(cè)到字符b時(shí),就會(huì)停止檢測(cè)過(guò)程
console.log(parseInt('12px345'));? //12
4- parseFloat(); 轉(zhuǎn)換成浮點(diǎn)型的數(shù)字
比parseInt()多識(shí)別一個(gè)小數(shù)點(diǎn)
parseFloat:parseFloat()與parseInt()方法的處理方式相似,從位置0開(kāi)始查看每個(gè)字符,直到找到第一個(gè)非有效的字符為止,然后把該字 符之前的字符串轉(zhuǎn)換成數(shù)字。不過(guò),對(duì)于這個(gè)方法來(lái)說(shuō),第一個(gè)出現(xiàn)的小數(shù)點(diǎn)是有效字符。如果有兩個(gè)小數(shù)點(diǎn),第二個(gè)小數(shù)點(diǎn)將被看作無(wú)效的, parseFloat()方法會(huì)把這個(gè)小數(shù)點(diǎn)之前的字符串轉(zhuǎn)換成數(shù)字。這意味著字符串 "22.34.5 "將被解析成22.34。
console.log(parseFloat('12.5px345')); //12.5
說(shuō)明:除了第一個(gè)小數(shù)點(diǎn)外,parseFloat()與parseInt()第二個(gè)區(qū)別在于它始終會(huì)忽略前導(dǎo)0
如果字符串中包含有效的十六進(jìn)制格式,parseInt("0xf")將 "0x" 轉(zhuǎn)換為相同大小的十進(jìn)制數(shù)值,而parsefloat("0xf")只會(huì)輸出0
5- Boolean(); 轉(zhuǎn)換成布爾值
1、除了0之外的所有數(shù)字,轉(zhuǎn)換為布爾型都為true:
2、除了""之外的所有字符,包括" ",轉(zhuǎn)換為布爾型都為true
3、NaN/null/undefined轉(zhuǎn)換為布爾型都為false:
6- toString()與 String()轉(zhuǎn)換成字符串
語(yǔ)法:str.toString();
功能:將str轉(zhuǎn)換為字符串
返回值:str的一個(gè)副本
參數(shù):str是要轉(zhuǎn)換的內(nèi)容,可以使數(shù)值,布爾值,對(duì)象和字符串
說(shuō)明: toString() 不能操作null和undefined ,會(huì)報(bào)錯(cuò),在不知道要轉(zhuǎn)換的值是不是null或undefined的情況下,可以使用string()函數(shù),它能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換為字符串。
? ? //數(shù)組串字符串:去掉括號(hào),加引號(hào) ? ? ? ? ? ? ? ?? console.log([1,2,3].toString()); // '1,2,3'
? ? //所有對(duì)象轉(zhuǎn)成字符串結(jié)果都是 '[object Object]' ? ? ? ?? console.log({name:'ujiuye'}.toString()); // '[oject Object]'
?? 可以用string()函數(shù)來(lái)把null和undefined轉(zhuǎn)換成字符串
?? console.log(String(null)); // 'null'