? ? ? 本期就是簡述下關(guān)于ES5的數(shù)據(jù)類型。
? ? ? 首先說es5的數(shù)據(jù)類型,es5呢就是現(xiàn)階段活躍在各大瀏覽器上的js的標(biāo)準(zhǔn)。ES是javascript的標(biāo)準(zhǔn),而各大瀏覽器上的js呢是實(shí)現(xiàn),只不過是各個(gè)瀏覽器的廠商對(duì)這個(gè)實(shí)現(xiàn)的不同而已,也造就了瀏覽器兼容性的問題。
? ? ? ? 好了話題扯回來先,ES5的數(shù)據(jù)類型分為簡單數(shù)據(jù)類型和復(fù)雜的數(shù)據(jù)類型,簡單的數(shù)據(jù)類型分為undefined,null,boolean,number,string。其中比較特殊的是undefined 與 null,已聲明未初始化的變量默認(rèn)為undefined類型,而null更像一個(gè)指針,typeof會(huì)顯示為object類型。
? ? ? ? ?boolean表現(xiàn)的是真和假,true或者false,對(duì)于其他類型的轉(zhuǎn)換是任何非空字符串可以轉(zhuǎn)化為true;任何非0和NaN的數(shù)字轉(zhuǎn)化為true;任何對(duì)象都是true;值得一說的是null轉(zhuǎn)化為false,而undefined不等價(jià)于true也不等價(jià)于false,但是!undefined卻等價(jià)于true。
? ? ? ? ?數(shù)字類型number,具體細(xì)分的話還分為整數(shù)和浮點(diǎn)數(shù),計(jì)算機(jī)中數(shù)字有一個(gè)具體的范圍,超過這個(gè)最大范圍會(huì)被解析為Infinity,小于這個(gè)最小范圍被解析為-Infinity,至于這個(gè)具體的范圍 5e-325 ~1.7976931348623157e+308(具體沒有去看工具書什么的驗(yàn)證),而數(shù)字類型中最特殊的是NaN,NaN是啥呢,NaN就是一個(gè)自己都不等于自己的貨,具體什么會(huì)被轉(zhuǎn)化為NaN呢,轉(zhuǎn)化為數(shù)字類型的undefined,不包含整數(shù),浮點(diǎn)數(shù),其他進(jìn)制的數(shù)的非空字符串轉(zhuǎn)化為數(shù)字時(shí)會(huì)變成NaN,至于對(duì)象呢就是用valueOf和toString方法轉(zhuǎn)化成字符串在轉(zhuǎn)換,說白了就是盡量轉(zhuǎn)化成數(shù)字而非NaN,畢竟這是個(gè)自己跟自己對(duì)著干的主。
? ? ? ? ? String就是字符串,這個(gè)簡單易懂,但是它呢包含這一些轉(zhuǎn)義字符,這就尷尬了,你在處理的時(shí)候就必須得考慮到轉(zhuǎn)義字符的問題,n(換行符),t(制表符),b(空格符),r(回車符),f(進(jìn)紙符),\\(斜杠),\'(單引號(hào)),\"(雙引號(hào)),xnn(16進(jìn)制表示的一個(gè)字符),unnn(16進(jìn)制表示的一個(gè)unicode符);字符串的轉(zhuǎn)換,其實(shí)就在于toString,具體的可以添加參數(shù),轉(zhuǎn)變成不同進(jìn)制,當(dāng)然還有一些強(qiáng)制類型轉(zhuǎn)換上存在的不同。
? ? ? ? ?最后說到復(fù)雜的數(shù)據(jù)類型,object,可以說是一組屬性與方法的集合,它可以是數(shù)組,json,還可以是function,關(guān)于屬性和方法的扯淡呢,可以扯到原形鏈,這個(gè)要扯很多,暫時(shí)先不說,單說對(duì)象(主要是不想碼太多字);對(duì)象是對(duì)一個(gè)內(nèi)存地址的占用,凡是以對(duì)象賦值的變量都是對(duì)對(duì)象的地址的引用,只有以同一個(gè)對(duì)象賦值的兩個(gè)變量才相等,否則它就是兩個(gè)不同內(nèi)存地址的引用,根本不存在可比性。至于對(duì)象中的值的引用,不同的對(duì)象有不同的方法,下標(biāo)或者其他。