JS入門必備之八種數(shù)據(jù)類型
一、開(kāi)門見(jiàn)山??
在ES5的時(shí)候,我們認(rèn)知的數(shù)據(jù)類型確實(shí)是 6種:Number、String、Boolean、undefined、object、Null
- ES6 中新增了一種 Symbol 。這種類型的對(duì)象永不相等,即始創(chuàng)建的時(shí)候傳入相同的值,可以解決屬性名沖突的問(wèn)題,做為標(biāo)記。
- 谷歌67版本中還出現(xiàn)了一種 bigInt。是指安全存儲(chǔ)、操作大整數(shù)。
所以:準(zhǔn)確來(lái)說(shuō)目前JS數(shù)據(jù)類型總共有8種!
- Number
- String
- Boolean
- Null
- Undefined
- Object
- Symbol
- BigInt
按照類型來(lái)分有基本數(shù)據(jù)類型和引用數(shù)據(jù)類型:
基本數(shù)據(jù)類型:String、Number、Boolean、Null、Undefined、Symbol、BigInt
引用數(shù)據(jù)類型:Object【Object是個(gè)大類,function函數(shù)、array數(shù)組、date日期...等都?xì)w屬于Object】
二、動(dòng)態(tài)數(shù)據(jù)類型??
JavaScript 擁有動(dòng)態(tài)類型。這意味著相同的變量可用作不同的類型
JavaScript中變量似乎很簡(jiǎn)單,因?yàn)樗暶髯兞恐恍枰粋€(gè)“var”就可以,不像其他編程語(yǔ)言嚴(yán)格區(qū)分了數(shù)據(jù)類型(int/double/char/boolean...)。這樣做也是有好處的,變量可以被賦予任何類型的值,同樣也可以給這個(gè)變量重新賦予不同類型的值。并不是“一定終身”
var x = 1; //number類型 var x = 0.1; //number類型,JS不區(qū)分整數(shù)值和浮點(diǎn)數(shù)值 //現(xiàn)在x由number變成string var x = "hello world"; //由雙引號(hào)內(nèi)文本構(gòu)成字符串 var x = 'javascript'; //單引號(hào)內(nèi)文本同樣可以構(gòu)成字符串 //現(xiàn)在x由string變成boolean var x = true; //true和false作為布爾值 var x = null; var x = undefined; //null和undefined很相似,是特殊的類型
(1)字符串string
字符串是存儲(chǔ)字符(比如 "Bill Gates")的變量
字符串可以是引號(hào)中的任意文本??梢允褂脝我?hào)或雙引號(hào)
- 使用單引號(hào)或者雙引號(hào),沒(méi)有區(qū)別
- 單引號(hào)不要嵌套單引號(hào)。雙引號(hào)同理,非要嵌套需要對(duì)引號(hào)進(jìn)行轉(zhuǎn)義 \' \"
var str = '孫悟空'; //單引號(hào)字符串 var str2 = '豬八戒'; //雙引號(hào)字符串
其他轉(zhuǎn)義字符:
- \n 表示換行符
- \r 表示回車符
- \t 水平制表符 tab
- \' 單引號(hào)
- \" 雙引號(hào)
- \\ 反斜杠
- \uXXXX 四位十六進(jìn)制表示unicode字符串
- \xXX 兩位十六進(jìn)制表示拉丁字符
字符串拼接:
var str1 = "hello"; var str2 = "world"; var str = str1 + str2 console.log(str); //helloworld
(2)數(shù)值number
JavaScript 只有一種數(shù)字類型。數(shù)字可以帶小數(shù)點(diǎn),也可以不帶
var num1=5.02; //使用小數(shù)點(diǎn)來(lái)寫 var num2=520; //不使用小數(shù)點(diǎn)來(lái)寫 //極大或極小的數(shù)字可以通過(guò)科學(xué)(指數(shù))計(jì)數(shù)法來(lái)書寫 var y=123e5; // 12300000 var z=123e-5; // 0.00123
數(shù)值范圍:
- 5e324 ~ 1.7976931348623157e+308
- 如果超過(guò)范圍,會(huì)表示為 Infinity 或者 -Infinity
特殊的數(shù)值NaN:
- NaN是number類型,是一個(gè)數(shù)值
- 特點(diǎn)1:NaN與任何數(shù)進(jìn)行任何運(yùn)算結(jié)果都是NaN
- 特點(diǎn)2:NaN與任何數(shù)都不相等,包括自己
相關(guān)函數(shù):
- isNaN() 判斷數(shù)據(jù)是否是NaN, 是返回true,否則返回false
- isFinite() 判斷數(shù)據(jù)是否在范圍內(nèi),在范圍內(nèi)返回true,否則false
//NaN是一個(gè)特殊的number,與其他所有值都不相等,包括它自身 console.log(NaN === NaN ); //false //唯一識(shí)別NaN的方法 console.log(isNaN(NaN) ); //true // 范圍:5e324 ~ 1.7976931348623157e+308 var min = 5e324; var max = 1.7976931348623157e+308; var a = 1.7976931348623157e+309; console.log(min); //Infinity console.log(max); //1.7976931348623157e+308 console.log(a); //Infinity console.log(isFinite(a)); //false(超出范圍,不在數(shù)值范圍內(nèi))
(3)布爾boolean
布爾(邏輯)只能有兩個(gè)值:true 或 false
var x=true; var y=false;
(4)null和undefined
null 表示沒(méi)有對(duì)象,此處無(wú)值
undefined 表示缺少值,本來(lái)應(yīng)該有值但沒(méi)定義
var x = null; var y = undefined
(5)symbol
Symbol 函數(shù)可以接受一個(gè)字符串作為參數(shù),為新創(chuàng)建的 Symbol 提供描述,用來(lái)顯示在控制臺(tái)或者作為字符串的時(shí)候使用,便于區(qū)分
let name = Symbol();
let name2 = Symbol("bb");
console.log(name); // Symbol()
console.log(typeof name); // "symbol"
console.log(name,name2); //Symbol() Symbol(bb)
console.log( name === name2); // false(6)對(duì)象object
對(duì)象由花括號(hào)分隔。在括號(hào)內(nèi)部,對(duì)象的屬性以鍵值對(duì)的形式 (name : value) 來(lái)定義。屬性由逗號(hào)分隔
//空格和折行無(wú)關(guān)緊要。聲明可橫跨多行
var obj = {
"name":"張三",
"age":18
}(這里鍵名也可以不用加引號(hào))
讀取對(duì)象中屬性:
name = obj.name //或 name = obj['name']
三、基本數(shù)據(jù)類型與引用數(shù)據(jù)類型區(qū)別??
3.1 聲明變量時(shí)不同的內(nèi)存分配
- 基本數(shù)據(jù)類型由于占據(jù)的空間大小固定且較小,會(huì)被存儲(chǔ)在棧當(dāng)中,也就是變量訪問(wèn)的位置
- 引用數(shù)據(jù)類型存儲(chǔ)在堆當(dāng)中,變量訪問(wèn)的其實(shí)是一個(gè)指針,它指向存儲(chǔ)對(duì)象的內(nèi)存地址
3.2 正是因?yàn)閮?nèi)存分配不同,在復(fù)制變量時(shí)結(jié)果也不一樣
- 基本數(shù)據(jù)類型復(fù)制后2個(gè)變量是獨(dú)立的,因?yàn)槭前阎悼截惲艘环?/li>
- 引用數(shù)據(jù)類型則是復(fù)制了一個(gè)指針,2個(gè)變量指向的值是該指針?biāo)赶虻膬?nèi)容,一旦一方修改,另一方也會(huì)受到影響??
<script type="text/javascript">
var x = 3;
var y = x;
console.log(x,y); //3 3
// 基本數(shù)據(jù)類型復(fù)制后2個(gè)變量是獨(dú)立的
x = 5; //修改一方,另一個(gè)不受影響
console.log(x,y); //5 3
var a = [0,1,2,3];
var b = a;
console.log(a, b); //(4)?[0, 1, 2, 3] (4)?[0, 1, 2, 3]
a[0] = 9
console.log(a, b); //(4)?[9, 1, 2, 3] (4)?[9, 1, 2, 3]
</script>
結(jié)果:

這里明顯可以看出b復(fù)制了a,改變a數(shù)組的值,b數(shù)組也跟著改變了。這就是因?yàn)楫?dāng)引用數(shù)據(jù)類型復(fù)制的是同一個(gè)指針而不是同一個(gè)值,指針指向的地址都是相同的,一方修改另一方也會(huì)受影響!
(這里涉及了JS的深拷貝和淺拷貝,這里就不再詳細(xì)贅述,后面會(huì)有單獨(dú)文章進(jìn)行講解)
3.3 參數(shù)傳遞不同
- 基本數(shù)據(jù)類型把變量里的值傳遞給參數(shù),之后參數(shù)和這個(gè)變量互不影響
- 引用數(shù)據(jù)類型(這里拿函數(shù)舉例):雖然函數(shù)的參數(shù)都是按值傳遞的,但是引用值傳遞的值是一個(gè)內(nèi)存地址,實(shí)參和形參指向的是同一個(gè)對(duì)象,所以函數(shù)內(nèi)部對(duì)這個(gè)參數(shù)的修改會(huì)體現(xiàn)在外部
數(shù)據(jù)類型的轉(zhuǎn)換以及檢測(cè)數(shù)據(jù)類型的方法會(huì)在其他文章單獨(dú)講解,為了方便閱讀這里就不再詳細(xì)贅述~
參考鏈接:
https://www.html.cn/qa/javascript/11619.html
https://www.cnblogs.com/nangezi/p/9049025.html
https://blog.csdn.net/u013592575/article/details/95087953
總結(jié)
到此這篇關(guān)于JS入門必備之八種數(shù)據(jù)類型的文章就介紹到這了,更多相關(guān)JS 八種數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ElementUI 的 Tree 組件的基本使用實(shí)戰(zhàn)教程
這篇文章主要介紹了ElementUI 的 Tree 組件的基本使用實(shí)戰(zhàn)教程,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
根據(jù)判斷瀏覽器類型屏幕分辨率自動(dòng)調(diào)用不同CSS的代碼
根據(jù)判斷瀏覽器類型屏幕分辨率自動(dòng)調(diào)用不同CSS的代碼...2007-02-02
JavaScript中0和""比較引發(fā)的問(wèn)題
這篇文章主要介紹了JavaScript中0和""比較引發(fā)的問(wèn)題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05
JavaScript彈出新窗口并控制窗口移動(dòng)到指定位置的方法
這篇文章主要介紹了JavaScript彈出新窗口并控制窗口移動(dòng)到指定位置的方法,涉及javascript針對(duì)彈出窗口的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
Textbox控件注冊(cè)回車事件及觸發(fā)按鈕提交事件具體實(shí)現(xiàn)
Lyncplus客戶端中訪問(wèn)Web頁(yè)面時(shí)遇到了TextBox控件回車自動(dòng)完成按鈕的提交事件失效的情況,于是上網(wǎng)查找相關(guān)的介紹最終解決了這兩個(gè)問(wèn)題,感興趣的你可以參考下或許對(duì)你有所幫助2013-03-03
javascript實(shí)現(xiàn)blob加密視頻源地址的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)blob加密視頻源地址的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08

