欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript的八種數(shù)據(jù)類型

 更新時間:2022年01月09日 08:50:21   作者:不知名前端李小白  
這篇文章主要分享的是JavaScript的八種數(shù)據(jù)類型,ES5的時候,我們大家認(rèn)知的數(shù)據(jù)類型是?6種的,但是ES6?中新增了一種?Symbol,谷歌67版本中還出現(xiàn)了一種?bigInt,是指安全存儲、操作大整數(shù),像下面文章我可沒就來看看這八種數(shù)據(jù)類型的詳細(xì)介紹吧

一、前言

在ES5的時候,我們認(rèn)知的數(shù)據(jù)類型確實是 6種:Number、StringBoolean、undefined、object、Null

ES6 中新增了一種 Symbol 。這種類型的對象永不相等,即始創(chuàng)建的時候傳入相同的值,可以解決屬性名沖突的問題,做為標(biāo)記。
谷歌67版本中還出現(xiàn)了一種 bigInt。是指安全存儲、操作大整數(shù)。
所以:準(zhǔn)確來說目前JS數(shù)據(jù)類型總共有8種!

  • Number
  • String
  • Boolean
  • Null
  • Undefined
  • Object
  • Symbol
  • BigInt

按照類型來分有基本數(shù)據(jù)類型和引用數(shù)據(jù)類型:

基本數(shù)據(jù)類型:StringNumber、Boolean、Null、UndefinedSymbol

引用數(shù)據(jù)類型:Object【Object是個大類,function函數(shù)、array數(shù)組、date日期...等都?xì)w屬于Object】

二、動態(tài)數(shù)據(jù)類型

JavaScript 擁有動態(tài)類型。這意味著相同的變量可用作不同的類型

JavaScript中變量似乎很簡單,因為它聲明變量只需要一個“var”就可以,不像其他編程語言嚴(yán)格區(qū)分了數(shù)據(jù)類型(int/double/char/boolean...)。這樣做也是有好處的,變量可以被賦予任何類型的值,同樣也可以給這個變量重新賦予不同類型的值。并不是“一定終身”

var x = 1; ? ? ? ?//number類型
var x = 0.1; ? ? //number類型,JS不區(qū)分整數(shù)值和浮點數(shù)值

//現(xiàn)在x由number變成string
var x = "hello world"; //由雙引號內(nèi)文本構(gòu)成字符串
var x = 'javascript'; ? //單引號內(nèi)文本同樣可以構(gòu)成字符串

//現(xiàn)在x由string變成boolean
var x = true; ? ?//true和false作為布爾值

var x = null;?
var x = undefined; ?//null和undefined很相似,是特殊的類型

2.1 字符串string

字符串是存儲字符(比如 "Bill Gates")的變量

字符串可以是引號中的任意文本??梢允褂脝我柣螂p引號

  • 使用單引號或者雙引號,沒有區(qū)別
  • 單引號不要嵌套單引號。雙引號同理,非要嵌套需要對引號進(jìn)行轉(zhuǎn)義 \' \"
var str = '孫悟空'; //單引號字符串
var str2 = '豬八戒'; //雙引號字符串

其他轉(zhuǎn)義字符:

  • \n 表示換行符
  • \r 表示回車符
  • \t 水平制表符 tab
  • \' 單引號     
  • \" 雙引號     
  • \\ 反斜杠 
  • \uXXXX 四位十六進(jìn)制表示unicode字符串
  • \xXX 兩位十六進(jìn)制表示拉丁字符

字符串拼接:

var str1 = "hello";
var str2 = "world";
var str = str1 + str2
console.log(str); //helloworld

2.2 數(shù)值number

JavaScript 只有一種數(shù)字類型。數(shù)字可以帶小數(shù)點,也可以不帶

var num1=5.02; ? ? //使用小數(shù)點來寫
var num2=520; ? ? ?//不使用小數(shù)點來寫

//極大或極小的數(shù)字可以通過科學(xué)(指數(shù))計數(shù)法來書寫
var y=123e5; ? ? ?// 12300000
var z=123e-5; ? ? // 0.00123

數(shù)值范圍:

  • 5e324 ~ 1.7976931348623157e+308
  • 如果超過范圍,會表示為 Infinity 或者 -Infinity

特殊的數(shù)值NaN:

  • NaN是number類型,是一個數(shù)值
  • 特點1:NaN與任何數(shù)進(jìn)行任何運算結(jié)果都是NaN
  • 特點2:NaN與任何數(shù)都不相等,包括自己

相關(guān)函數(shù):

  • isNaN() 判斷數(shù)據(jù)是否是NaN, 是返回true,否則返回false
  • isFinite() 判斷數(shù)據(jù)是否在范圍內(nèi),在范圍內(nèi)返回true,否則false
//NaN是一個特殊的number,與其他所有值都不相等,包括它自身
console.log(NaN === NaN ); //false

//唯一識別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))

2.3 布爾boolean

布爾(邏輯)只能有兩個值:true false

var x=true;
var y=false;

2.4 null和undefined

null 表示沒有對象,此處無值

undefined 表示缺少值,本來應(yīng)該有值但沒定義

var x = null;
var y = undefined

2.5 symbol

Symbol 函數(shù)可以接受一個字符串作為參數(shù),為新創(chuàng)建的 Symbol 提供描述,用來顯示在控制臺或者作為字符串的時候使用,便于區(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

2.6 對象object

對象由花括號分隔。在括號內(nèi)部,對象的屬性以鍵值對的形式 (name : value) 來定義。屬性由逗號分隔

//空格和折行無關(guān)緊要。聲明可橫跨多行
var obj = {
? ? "name":"張三",
? ? "age":18
}

(這里鍵名也可以不用加引號) 

讀取對象中屬性:

name = obj.name
//或
name = obj['name']

三、基本數(shù)據(jù)類型與引用數(shù)據(jù)類型區(qū)別

3.1 聲明變量時不同的內(nèi)存分配

基本數(shù)據(jù)類型由于占據(jù)的空間大小固定且較小,會被存儲在棧當(dāng)中,也就是變量訪問的位置
引用數(shù)據(jù)類型存儲在堆當(dāng)中,變量訪問的其實是一個指針,它指向存儲對象的內(nèi)存地址

3.2 正是因為內(nèi)存分配不同,在復(fù)制變量時結(jié)果也不一樣

基本數(shù)據(jù)類型復(fù)制后2個變量是獨立的,因為是把值拷貝了一份
引用數(shù)據(jù)類型則是復(fù)制了一個指針,2個變量指向的值是該指針?biāo)赶虻膬?nèi)容,一旦一方修改,另一方也會受到影響??

<script type="text/javascript">
? ? var x = 3;
? ? var y = x;
? ? console.log(x,y); //3 3
? ? // 基本數(shù)據(jù)類型復(fù)制后2個變量是獨立的
? ? x = 5; //修改一方,另一個不受影響
? ? 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ù)組也跟著改變了。這就是因為當(dāng)引用數(shù)據(jù)類型復(fù)制的是同一個指針而不是同一個值,指針指向的地址都是相同的,一方修改另一方也會受影響!

(這里涉及了JS的深拷貝和淺拷貝,這里就不再詳細(xì)贅述,后面會有單獨文章進(jìn)行講解)

3.3 參數(shù)傳遞不同

基本數(shù)據(jù)類型把變量里的值傳遞給參數(shù),之后參數(shù)和這個變量互不影響
引用數(shù)據(jù)類型(這里拿函數(shù)舉例):雖然函數(shù)的參數(shù)都是按值傳遞的,但是引用值傳遞的值是一個內(nèi)存地址,實參和形參指向的是同一個對象,所以函數(shù)內(nèi)部對這個參數(shù)的修改會體現(xiàn)在外部
數(shù)據(jù)類型的轉(zhuǎn)換以及檢測數(shù)據(jù)類型的方法會在其他文章單獨講解,為了方便閱讀這里就不再詳細(xì)贅述~

到此這篇關(guān)于JavaScript的八種數(shù)據(jù)類型的文章就介紹到這了,更多相關(guān)JavaScript數(shù)據(jù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

參考鏈接:

https://www.html.cn/qa/javascript/11619.html

https://www.cnblogs.com/nangezi/p/9049025.html

https://blog.csdn.net/u013592575/article/details/95087953

相關(guān)文章

最新評論