javascript中的五種基本數(shù)據(jù)類(lèi)型
[0]5種數(shù)據(jù)類(lèi)型:
[0.1]基本數(shù)據(jù)類(lèi)型:Undefined、Null、Boolean、Number、String
[0.1.1]基本類(lèi)型值是指簡(jiǎn)單的數(shù)據(jù)段,5種基本類(lèi)型是按值訪問(wèn)的,因?yàn)榭梢圆僮鞅4嬖谧兞恐械膶?shí)際值
[0.1.2]基本類(lèi)型的值在內(nèi)存中占據(jù)固定大小的空間,被保存在棧內(nèi)存中。從一個(gè)變量向另一個(gè)變量復(fù)制基本類(lèi)型的值,會(huì)創(chuàng)建這個(gè)值的一個(gè)副本。
[0.1.3]不能給基本類(lèi)型的值添加屬性
[0.2]引用數(shù)據(jù)類(lèi)型:Object
[0.2.1]引用類(lèi)型值是指那些可以由多個(gè)值構(gòu)成的對(duì)象。js不允許直接訪問(wèn)內(nèi)存中的位置,也就是不能直接訪問(wèn)操作對(duì)象的內(nèi)存空間。在操作對(duì)象時(shí),實(shí)際上是在操作對(duì)象的引用而不是實(shí)際的對(duì)象。
[0.2.2]引用類(lèi)型的值是對(duì)象,保存在堆內(nèi)存中,包含引用類(lèi)型值的變量實(shí)際上包含的并不是對(duì)象本身,而是一個(gè)指向該對(duì)象的指針。從一個(gè)變量向另一個(gè)變量復(fù)制引用類(lèi)型的值,復(fù)制的其實(shí)是指針,因此兩個(gè)變量最終都指向同一個(gè)對(duì)象。
[0.2.3]對(duì)于引用類(lèi)型的值,可以為其添加屬性和方法,也可以改變和刪除其屬性和方法
[1]Undefined
[1.1]Undefined類(lèi)型只有一個(gè)值,就是undefined
[1.2]var a <=> var a = undefined;
[1.3]對(duì)于尚未聲明過(guò)的變量,只能執(zhí)行一項(xiàng)操作,就是使用typeof操作符檢測(cè)其數(shù)據(jù)類(lèi)型【但在嚴(yán)格模式下會(huì)導(dǎo)致錯(cuò)誤】
[1.4]出現(xiàn)場(chǎng)景:
[1.4.1]已聲明未賦值的變量
[1.4.2]獲取對(duì)象不存在的屬性
[1.4.3]無(wú)返回值的函數(shù)的執(zhí)行結(jié)果
[1.4.4]函數(shù)的參數(shù)沒(méi)有傳入
[1.4.5]void(expression)
[1.5]類(lèi)型轉(zhuǎn)換
Boolean(undefined):false
Number(undefined):NaN
String(undefined):'undefined'
[2]Null
[2.1]Null類(lèi)型只有一個(gè)值,就是null,邏輯角度看,null值表示一個(gè)空對(duì)象指針
[2.2]如果定義的變量將用于保存對(duì)象,最好將該變量初始化為null
[2.3]實(shí)際上undefined值是派生自null值的,所以u(píng)ndefined == null
[2.4]出現(xiàn)場(chǎng)景:對(duì)象不存在時(shí)
[2.5]類(lèi)型轉(zhuǎn)換
Boolean(null):false
Number(null):0
String(null):'null'
[注意1]null是空對(duì)象指針,而[]是空數(shù)組,{}是空對(duì)象,三者不相同
[注意2]null不能添加自定義屬性
[3]Boolean
[3.1]Boolean類(lèi)型只有兩個(gè)值:true 和 false
[3.2]出現(xiàn)場(chǎng)景:
[3.2.1]條件語(yǔ)句導(dǎo)致系統(tǒng)執(zhí)行的隱士類(lèi)型轉(zhuǎn)換
[3.2.2]字面量或變量定義
[3.3]類(lèi)型轉(zhuǎn)換
Number(true): 1 || Number(false) : 0
String(true):'true' || String(false):'false'
[3.4]Boolean()
Boolean(undefined):false
Boolean(null):false
Boolean(非空對(duì)象包括空數(shù)組[]和空對(duì)象{}):true
Boolean(非0): true || Boolean(0和NaN):false
Boolean(非空包括空格字符串):true || Boolean(''):false
[注意]true不一定等于1,false也不一定等于0
[4]Number
[4.1]Number類(lèi)型使用IEEE754格式來(lái)表示整數(shù)和浮點(diǎn)數(shù)值
[注意]可以用一個(gè)值-0來(lái)將其轉(zhuǎn)換成一個(gè)數(shù)字
[4.2]三種字面量格式是十進(jìn)制、八進(jìn)制、十六進(jìn)制
[4.2.1]八進(jìn)制字面值的第一位必須是0,然后是八進(jìn)制數(shù)字序列(0-7),如果字面值中的數(shù)值超出了范圍,那么前導(dǎo)0將被忽略,后面的數(shù)值被當(dāng)作十進(jìn)制數(shù)解析
[4.2.2]八進(jìn)制字面量在嚴(yán)格模式下是無(wú)效的,會(huì)導(dǎo)致js拋出錯(cuò)誤
[4.2.3]十六進(jìn)制字面值的前兩位必須是0x,后跟十六進(jìn)制數(shù)字序列,字母可大寫(xiě)可小寫(xiě)
[4.2.4]十六進(jìn)制中字面值中的數(shù)值走出范圍,如出現(xiàn)g,h等會(huì)報(bào)錯(cuò)
[4.2.5]在進(jìn)行算術(shù)計(jì)算時(shí),所有以八進(jìn)制和十六進(jìn)制表示的數(shù)值最終都將被轉(zhuǎn)換成十進(jìn)制數(shù)值
[4.3]數(shù)值表示:
[4.3.1]js中可以保存正0和負(fù)0,且被認(rèn)為相等
[4.3.2]浮點(diǎn)數(shù)值:該數(shù)值中必須包含一個(gè)小數(shù)點(diǎn),并且小數(shù)點(diǎn)后面必須至少有一位數(shù)字。
[4.3.2.1]由于浮點(diǎn)型數(shù)值需要的內(nèi)存空間是保存整數(shù)值的兩倍,因此js會(huì)不失時(shí)機(jī)地將浮點(diǎn)數(shù)值轉(zhuǎn)換成整數(shù)值,若小數(shù)點(diǎn)后沒(méi)有跟任何數(shù)字或者浮點(diǎn)值本身表示的就是一個(gè)整數(shù),這個(gè)數(shù)值會(huì)作為整數(shù)值來(lái)保存。
[4.3.2.2]浮點(diǎn)數(shù)值的最高精度是17位小數(shù)
[4.3.2.3]對(duì)于極大或者極小的數(shù),可以用科學(xué)計(jì)數(shù)法e來(lái)表示的浮點(diǎn)數(shù)值來(lái)表示
[4.3.2.4]默認(rèn)情況下,js會(huì)將小數(shù)點(diǎn)后面帶有6個(gè)0以上的浮點(diǎn)數(shù)值轉(zhuǎn)換為以e表示法表示的數(shù)值
[4.3.2.5]基于IEEE754數(shù)值的浮點(diǎn)計(jì)算的通病是舍入誤差的問(wèn)題。如:0.1+0.2 === 0.3(15個(gè)0)4
[4.3.3]js中的數(shù)值范圍是Number.MIN_VALUE(5e-324) —— Number.MAX_VALUE(1.7976931348623157e+308)
[4.3.3.1]如果超出正數(shù)范圍,輸出Infinity(正無(wú)窮大),超出負(fù)數(shù)范圍,輸出-Infinity(負(fù)無(wú)窮大)
[4.3.3.2]+-Infinity不能參與數(shù)值計(jì)算
[4.3.3.3]Number.MAX_VALUE+1 != Infinity,因?yàn)橛?jì)算機(jī)最多保存52位尾數(shù)位,保存不了1000多位,早就失去精度,即小數(shù)位全為0,所以相加不變
[4.3.3.4]Number.MIN_VALUE - 1 != -Infinity,也是同樣的原因,所以結(jié)果為-1
[4.3.3.5]可以用isFinite()來(lái)確定一個(gè)數(shù)值是不是有窮的,包含著隱式類(lèi)型轉(zhuǎn)換Number()
[4.3.3.6]isFinite(NaN) //false
[4.3.4]NaN
[4.3.4.1]NaN與任何值都不相等,包括NaN本身
[4.3.4.2]任何涉及NaN的操作都會(huì)返回NaN
[4.3.4.3]isNaN()來(lái)判斷這個(gè)數(shù)字是不是NaN,包含著隱式類(lèi)型轉(zhuǎn)換Number()
[4.4]數(shù)值轉(zhuǎn)換:Number()可用于任何類(lèi)型,parseInt()和parseFloat專(zhuān)門(mén)用于把字符串轉(zhuǎn)換成數(shù)值
[注意1]Number()、parseInt()、parseFloat()可以接受各種進(jìn)制的數(shù)字,但對(duì)于含數(shù)字的字符串并不適用
[注意2]Number()、parseInt()、parseFloat()中數(shù)字為1.2. 會(huì)報(bào)錯(cuò),但字符串為'1.2.'則不會(huì)報(bào)錯(cuò)
[4.4.1]Number()
Number(true):1 || Number(false):0
Number(各種進(jìn)制的數(shù)字):運(yùn)算后的十進(jìn)制的數(shù)字,如1.0或1.或01會(huì)以1輸出
Number(undefined):NaN
Number(null):0
Number(字符串):
Number(只包含數(shù)字的十進(jìn)制和十六進(jìn)制的字符串):運(yùn)算后的十進(jìn)制的數(shù)字
[注意]字符串中不識(shí)別八進(jìn)制,按照十進(jìn)制數(shù)字處理
Number(''和' '):0
Number(其他情況的字符串):NaN
Number(對(duì)象):
Number([]和[0]和[-0]):0
Number([數(shù)字]):運(yùn)算后的數(shù)字
Number([1,2]和{}和其他對(duì)象):NaN
[4.4.2]parseInt():在轉(zhuǎn)換字符串時(shí),會(huì)忽略字符串前面的空格,直到找到第一個(gè)非空格字符。如果第一個(gè)字符不是數(shù)字字符或者負(fù)號(hào),parseInt()就會(huì)返回NaN。如果是,則繼續(xù)解析,直到解析完成或者遇到非數(shù)字字符。
[4.4.2.1]parseInt()可以識(shí)別出各種進(jìn)制的整數(shù),但在解析八進(jìn)制字面量的字符串,ECMAScript3會(huì)解析八進(jìn)制,但ECMAScript5沒(méi)有解析八進(jìn)制的能力
[4.4.2.2]parseInt()函數(shù)提供第二個(gè)參數(shù),表示多少進(jìn)制,如:parseInt('123',16或10或2)
[4.4.2.3]parseInt(各種進(jìn)制的數(shù)字):運(yùn)算后的十進(jìn)制的數(shù)字,如1.0或1.或01會(huì)以1輸出
[4.4.2.4]因?yàn)閜arseInt()是專(zhuān)門(mén)用來(lái)處理字符串轉(zhuǎn)換數(shù)字的,所以parseInt(其他類(lèi)型包括'')//NaN
[4.4.3]parseFloat():類(lèi)似于parseInt(),會(huì)忽略字符串前面的空格,直到找到第一個(gè)非空格字符
[4.4.3.1]parseFloat()只能解析十進(jìn)制字符串
[4.4.3.2]parseFloat(各種進(jìn)制的數(shù)字):運(yùn)算后的十進(jìn)制的數(shù)字,如1.0或1.或01會(huì)以1輸出
[5]String:由單引號(hào)或雙引號(hào)括起來(lái)的字符序列,任何字符串的長(zhǎng)度都可以通過(guò)訪問(wèn)length屬性獲得
[5.1]字符字面量,也叫轉(zhuǎn)義序列
\n 換行
\t 制表
\b 空格
\r 回車(chē)
\f 進(jìn)紙
\\ 斜杠
\' 單引號(hào)
\" 雙引號(hào)
\xnn 以十六進(jìn)制nn表示一個(gè)字符(n為0-f),如\x41表示'A'
\unnnn 以十六進(jìn)制nnnn表示一個(gè)Unicode字符(n為0-f),如\u03a3表示希臘字符ε
[5.2]ECMAScript中的字符串是不可變的
[5.3]字符串連接需要先創(chuàng)建一個(gè)新字符串,然后在新字符串中填充兩個(gè)需要拼接的字符串,最后再銷(xiāo)毀原來(lái)的字符串。這個(gè)過(guò)程在后臺(tái)發(fā)生,也是在某些舊版本瀏覽器(IE6)拼接字符串速度慢的原因,但后來(lái)已經(jīng)解決了這個(gè)低效率問(wèn)題
[5.4]字符串轉(zhuǎn)換
[5.4.1]toString()
Null和Undefined沒(méi)有該方法
Boolean、Object、String有該方法
Number使用該方法可以傳遞基數(shù)2、8、10、16,如var num = 10;num.toString(2);//1010
但10.toString(2)會(huì)報(bào)錯(cuò),因?yàn)閿?shù)字后面不能跟標(biāo)識(shí)符
[5.4.2]String()
有toString()方法,使用toString()方法
String(null);//'null'
String(undefined);//'undefined'
[5.4.3]要把某個(gè)值轉(zhuǎn)換為字符串,可以使用加號(hào)操作符把它與一個(gè)空字符串''加在一起
[5.4.4]如果數(shù)組中的某一項(xiàng)的值是null或者undefined,那么該值在join()、toLocaleString()、toString()和valueOf()方法返回的結(jié)果中以空字符串表示
最后給大家一個(gè)簡(jiǎn)單的例子說(shuō)明下這五種基本類(lèi)型的不同
var testString = "Hello"; var testBoobean = true; var testUndefined = undefined; var testUndefined1; var testNull = null; var testObject = {a:1}; var testFunction = function(){return;}; alert(testString);//"string" alert(testBoobean);//"boolean" alert(testUndefined);//"undefined" alert(testUndefined1);//"undefined" alert(testUndefined2);//"undefined" alert(testNull);//"object" alert(testObject);//"object" alert(testFunction);//"function"
- js判斷數(shù)據(jù)類(lèi)型如判斷是否為數(shù)組是否為字符串等等
- js 判斷數(shù)據(jù)類(lèi)型的幾種方法
- js 數(shù)據(jù)類(lèi)型轉(zhuǎn)換總結(jié)筆記
- js 判斷各種數(shù)據(jù)類(lèi)型的簡(jiǎn)單方法(推薦)
- 詳解js的六大數(shù)據(jù)類(lèi)型
- Javascript如何判斷數(shù)據(jù)類(lèi)型和數(shù)組類(lèi)型
- JavaScript中數(shù)據(jù)類(lèi)型轉(zhuǎn)換總結(jié)
- js的各種數(shù)據(jù)類(lèi)型判斷的介紹
- javaScript中一些常見(jiàn)的數(shù)據(jù)類(lèi)型檢查校驗(yàn)
相關(guān)文章
JavaScript Event學(xué)習(xí)補(bǔ)遺 addEventSimple
這里有個(gè)addEventSimple和removeEventSimple函數(shù),有時(shí)候需要不那么顯眼的事件處理程序的時(shí)候我就用這兩個(gè)函數(shù)注冊(cè)。2010-02-02如何用JS/HTML將時(shí)間戳轉(zhuǎn)換為“xx天前”的形式
如果我們有一份過(guò)去時(shí)間戳,如何使用JS/HTML將時(shí)間戳轉(zhuǎn)換為“xx天前”的形式呢?很多朋友都覺(jué)得解決辦法有點(diǎn)困難,其實(shí)很簡(jiǎn)單的,下面小編給大家分享完整的實(shí)現(xiàn)代碼,一起看看吧2017-02-02JS模擬實(shí)現(xiàn)哈希表及應(yīng)用詳解
這篇文章主要介紹了JS模擬實(shí)現(xiàn)哈希表及應(yīng)用,結(jié)合實(shí)例形式分析了javascript模擬實(shí)現(xiàn)哈希表的步驟、相關(guān)操作技巧與使用方法,需要的朋友可以參考下2018-05-05JS中實(shí)現(xiàn)replaceAll的方法(實(shí)例代碼)
本文是對(duì)JS中實(shí)現(xiàn)replaceAll的方法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11JavaScript實(shí)現(xiàn)x秒后自動(dòng)跳轉(zhuǎn)到一個(gè)頁(yè)面
今天看視頻學(xué)習(xí)時(shí)學(xué)習(xí)了一種新技術(shù),即平時(shí)我們?cè)谝粋€(gè)頁(yè)面點(diǎn)擊“提交”或“確認(rèn)”會(huì)自動(dòng)跳轉(zhuǎn)到一個(gè)頁(yè)面,在網(wǎng)上搜了一下,關(guān)于這個(gè)技術(shù)處理有多種方法,有興趣的朋友可以參考下2013-01-01Canvas實(shí)現(xiàn)放射線動(dòng)畫(huà)效果
本文主要分享了Canvas實(shí)現(xiàn)放射線動(dòng)畫(huà)的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02JavaScript中防抖和節(jié)流的實(shí)戰(zhàn)應(yīng)用記錄
防抖與節(jié)流都是用來(lái)限制用戶頻發(fā)觸發(fā)事件的機(jī)制,下面這篇文章主要給大家介紹了關(guān)于JavaScript中防抖和節(jié)流的實(shí)戰(zhàn)應(yīng)用,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04