JavaScript包括ECMAScript家卖、DOM和BOM三部分眨层。而ECMAScript當(dāng)中一共包括6種數(shù)據(jù)類型:Undefined、Null上荡、Boolean趴樱、Number、String酪捡、Object. ?
這6中數(shù)據(jù)類型可分為兩大類:值類型與引用類型叁征。object屬于引用類型,其余的則屬于值類型沛善。
值類型特點(diǎn):是按值訪問(wèn)的航揉,你可以操作保存在變量中的實(shí)際的值
引用類型特點(diǎn):是屬性和方法的集合,擁有屬性和方法金刁。
那知道這些帅涂,好像還是不怎么了解這些具體的每一個(gè)數(shù)據(jù)類型,那我們就“沏上一壺茶“慢慢揭開它的面紗尤蛮。
1.Undefined——它僅有一個(gè)值媳友,那就是undefined。
1)當(dāng)一個(gè)變量有聲明但沒有賦值時(shí)产捞,這個(gè)變量的值就是undefined醇锚;
? ? ? ?var test;
? ? ? ?console.log(test== undefined); ? ? ? ?//true
2)函數(shù)的默認(rèn)返回值也是為undefined。
2.Null——它僅有一個(gè)值,那就是null焊唬。
Null在邏輯上表示的是一個(gè)空的對(duì)象恋昼,這可以使用typeof這個(gè)操作符來(lái)檢查,如:
? ? ? var ?box = null赶促;
? ? ?console.log(typeofbox); ? ? ? ? ?//object
何時(shí)使用null呢:當(dāng)我們定義了一個(gè)變量液肌,準(zhǔn)備用它來(lái)保存一個(gè)對(duì)象,那么此時(shí)我們最好是將其初始化為null鸥滨。
3.Boolean——它有2個(gè)值嗦哆,true和false。
注意哦:這里的布爾值是區(qū)分大小寫的婿滓,即True與False是標(biāo)識(shí)符老速,不是布爾值。
ECMAScript中所有的數(shù)據(jù)類型的值都能等價(jià)于Boolean的值凸主,將一個(gè)數(shù)值轉(zhuǎn)換成對(duì)應(yīng)的Boolean值橘券,可調(diào)用轉(zhuǎn)型函數(shù)Boolean( ); 例:
? ? ? var test = “一念成mo”;
? ? ? var testBoolean = Boolean(test); ? ? ? ? // true
那關(guān)于各數(shù)據(jù)類型與Boolean之間的轉(zhuǎn)換,我們?cè)诮榻B完這些類型之后統(tǒng)一給出秕铛。
4.Number——分為3種不同類型:整數(shù)int约郁、浮點(diǎn)數(shù)float缩挑、NaN
1)整數(shù):應(yīng)該都很好理解但两,那在嚴(yán)格模式下,統(tǒng)一使用十進(jìn)制表示供置。
2)浮點(diǎn)值:就是指數(shù)值中包含小數(shù)點(diǎn)谨湘,并且小數(shù)點(diǎn)后面必須至少一位數(shù)字,雖然小數(shù)點(diǎn)前面可以設(shè)置沒有整數(shù)芥丧,但不推薦這種寫法紧阔。
? ? ? var ?floatNum = 1.1;
? ? ? var ?floatNum = ?.1; ? ? ? ?//有效,但不推薦
由于保存浮點(diǎn)數(shù)值的內(nèi)容空間是整數(shù)的2倍耶续担!所以當(dāng)遇到這種情況如(1.0)擅耽,該數(shù)值將會(huì)自動(dòng)地被轉(zhuǎn)成整數(shù)型。
? ? ? var ?floatNum = 1; ? ? ? ? // 1
? ? ? var ?floatNum = 1.0; ? ? ?// 1
同時(shí)數(shù)值是有使用范圍的:最大1.7976931348623157e+308物遇,最小5e-324乖仇;若超過(guò)這個(gè)范圍則會(huì)變成正無(wú)窮與負(fù)無(wú)窮(Infinity)。
3)NaN:是一個(gè)很特殊的值询兴,它是Not a Number的意思乃沙,即非數(shù)字。表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況诗舰。例如:任何數(shù)除以0就會(huì)返回NaN警儒,但它是不會(huì)影響代碼的。
它有2個(gè)不平凡的特點(diǎn):1.任何與NaN的操作都會(huì)返回NaN眶根。2.NaN與任何值都不相等蜀铲,包括NaN本身边琉。
? ? ? console.log(NaN == NaN); ? ? ? ?//false
針對(duì)這兩個(gè)本身特點(diǎn),ECMAScript定義了isNaN( )這個(gè)函數(shù)记劝,來(lái)檢查某個(gè)參數(shù)是否為“不是一個(gè)數(shù)值”艺骂。例;
? ? ? console.log(isNaN(NaN)); ? ? ? // true ? ? ?此處true的含義是:NaN不是一個(gè)數(shù)。
? ? ? console.log(isNaN(10)); ? ? ? ? //true ? ? ? 此處true的含義是:10是一個(gè)數(shù)隆夯。
5.String——用于表示0或多個(gè)16位Unicode字符組成的字符串钳恕,需要用雙引號(hào)或單引號(hào)表示。
? ? ? var ?str = “1010”;
? ? ? var ?str = “一念成mo”;
6.Object——對(duì)象蹄衷,即一組數(shù)據(jù)與功能的集合忧额。
? ? ? var ?obj = {};
聊完這6種數(shù)據(jù)類型的基本情況后,我們來(lái)說(shuō)說(shuō)另外4個(gè)復(fù)雜的故事愧口。
首先我們要知道JavaScript是弱變量類型的語(yǔ)言睦番。有些時(shí)候我們需要知道變量的數(shù)據(jù)類型,因?yàn)槲覀儤O可能需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換耍属。
故事一:各數(shù)據(jù)類型轉(zhuǎn)換成Boolean值
我想再給大家分享一個(gè)英文English版的故事一托嚣,也是很不錯(cuò)的。
1. Undefined and null are always false.
2. Booleans are just treated as booleans (obviously).
3. Numbers are false if they equal 0 or NaN; otherwise, they’re true.
4. Strings are true, except for the empty string "", which is false.
5. Objects are always true.
故事二:各數(shù)據(jù)類型轉(zhuǎn)換為數(shù)值(Number)
顯性轉(zhuǎn)換使用:Number( )厚骗、parseInt(?)與parseFloat( )示启。
Number(?)函數(shù)的轉(zhuǎn)換規(guī)則:
1.Boolean值,true和false轉(zhuǎn)換就是1和0领舰。? var num = Number(true); ? ? ?// 1
2.數(shù)值本身夫嗓,則只是簡(jiǎn)單的傳入和返回。? var num = Number(10); ? ? ? // 10
3.Null值冲秽,返回0. ? ? var num = Number(null); ? ? ? ?// 0
4.1 空字符串舍咖,返回0. ? ? ? var num = Number(" "); ? ? // 0
4.2 浮點(diǎn)格式字符串如“1.1”,會(huì)忽略小數(shù)點(diǎn)锉桑,轉(zhuǎn)為1排霉。 ? var num = Number(“1.1”); ? ?// 1
4.3如果字符串只包含數(shù)字(包括前面的正負(fù)),則轉(zhuǎn)換成十進(jìn)制如:“123”變成123民轴;”000123“變成”123“.? ? ? var num = Number(“000123”); ? ? ? // 123
4.4除了上述以外的攻柠,其他轉(zhuǎn)換成NaN。? var num = Number(“一念成mo”); ? ? ? // NaN
4.Undefined杉武,返回NaN辙诞。? var num = Number(undefined); ? ? ? ?// NaN
5.對(duì)象Object,則調(diào)用對(duì)象valueOf( )方法轻抱,如果轉(zhuǎn)換的結(jié)果是NaN飞涂,那么調(diào)用toString( )方法
parseInt()函數(shù)轉(zhuǎn)換規(guī)則:
在進(jìn)行字符串的轉(zhuǎn)換中,我們更多的是使用parseInt( )。
首先较店,它會(huì)忽略字符串前面的空格士八;直到找到第一個(gè)非空格字符。
若第一個(gè)字符不是數(shù)字字符或負(fù)號(hào)梁呈,則返回NaN婚度;如果第一個(gè)是數(shù)值字符或符號(hào),將會(huì)一直找下去官卡,直到非數(shù)字字符蝗茁。
var num1 =parseInt(“123sf”) ; ? ? // 123
var num2 = parseInt(“”); ? ? ? ? ? ? // NaN
var num3 = parseInt(“0xA”); ? ? ?// 10(16進(jìn)制)
var num4 =parseInt(“22.5”); ? ? ?// 22
var num5 = parseInt(“070”); ? ? // 56(八進(jìn)制)
var num6 =parseInt(“70”); ? ? ? ?// 70
在使用parseInt()解析像八進(jìn)制字面的字符串時(shí),比如parseInt(“010”)方法在不同瀏覽器下存在兼容問(wèn)題寻咒。IE6哮翘、IE7、IE8會(huì)按照8進(jìn)制進(jìn)行轉(zhuǎn)換毛秘,解決辦法:parseInt(“010”, 10);其他的瀏覽器則會(huì)忽略前面的0變成十進(jìn)制饭寺。
parseFloat()函數(shù)轉(zhuǎn)換規(guī)則:
parseFloat( )只有第一個(gè)小數(shù)點(diǎn)有效。它和parseInt()的區(qū)別始終會(huì)忽略前面的0. parseFloat()只解析十進(jìn)制叫挟。最后還注意一點(diǎn):如果字符串包含的一個(gè)可以解析為整數(shù)的數(shù)(沒有小數(shù)點(diǎn)艰匙,或者小數(shù)點(diǎn)后面都是0),parseFloat()都會(huì)返回整數(shù)抹恳。
varnum1 = parseFloat(“1234blue”); ? ? ? ?//1234
var num2 =parseFloat(“0xA”); ? ? ? ? ? ? ? ?// 0
var num3 =parseFloat(“22.5”); ? ? ? ? ? ? ?// 22.5
var num4 =parseFloat(“22.34.5”); ? ? ? ? // 22.34
var num5 =parseFloat(“3.125e7”); ? ? ? ?// 31250000
故事三:各數(shù)據(jù)類型轉(zhuǎn)換成String值
要把一個(gè)值轉(zhuǎn)換為一個(gè)字符串可以使用toString()方法员凝,不過(guò)只有數(shù)值、布爾值适秩、對(duì)象和字符串有toString()這個(gè)方法绊序,而null和undefined沒有這個(gè)方法硕舆。我們還可以使用轉(zhuǎn)型函數(shù)String()秽荞,這個(gè)函數(shù)能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換成字符串。
var age =11;
var ageSrting=age.toString(); ? ? ? // “11”
var obj =null;
console.log(String(obj)); ? ? ? ? ? ? // "null"
也可以將其轉(zhuǎn)換成二進(jìn)制抚官,八進(jìn)制扬跋,十六進(jìn)制:
var num = 10;
console.log(num.toString()); ? ? ? // “10”
console.log(num.toString(2)); ? ? // “1010”
console.log(num.toString(16)); ? ?// “a”
故事四:字符串與數(shù)值之間的隱式轉(zhuǎn)換
隱式轉(zhuǎn)換的方式:可以通過(guò)+""、* 1凌节、/1的運(yùn)算來(lái)把數(shù)值轉(zhuǎn)換成字符串钦听。(可相互轉(zhuǎn)換)
數(shù)字——>字符串:使用+(連字符) ? ? ? ? ? ?數(shù)字+字符串=字符串;
字符串——>數(shù)字:使用+ - * / %倍奢;
例如:
"123"-0 ? ?"123"*0 ? ?"123"/0 ? ?+"123" ? ?"123"%比前面的數(shù)值字符串大的數(shù)字
如果覺得對(duì)你有用或者有點(diǎn)小喜歡朴上,請(qǐng)收藏或轉(zhuǎn)發(fā)或評(píng)論,這也是一種打賞卒煞。么么噠~~~