一文帶你走進(jìn)js數(shù)據(jù)類型與數(shù)據(jù)結(jié)構(gòu)的世界
1. 什么叫動(dòng)態(tài)類型
- JavaScript 是一種弱類型或者說(shuō)動(dòng)態(tài)語(yǔ)言。
- 我們不用提前聲明變量的類型,在程序運(yùn)行過(guò)程中,類型會(huì)被自動(dòng)確定。
- 這也意味著你可以使用同一個(gè)變量保存不同類型的數(shù)據(jù)
let a; // 初始不給任何類型 a = 11; // a此時(shí)是number類型 a = "二大爺"; // a 變成了字符串類型 a = true; // a 變成了布爾類型
實(shí)際應(yīng)用過(guò)程中并不推薦這樣做,容易出現(xiàn)一些不可預(yù)知的錯(cuò)誤
- 比如你兄弟忽然變成了女的,又很漂亮(睡還是不睡?)
- 比如你閨蜜忽然變成了男的,很帥(上還是不上?)
- 比如隔壁老王變成了你老婆…(老王自己變成綠帽?)
- …
- 綜上所述,數(shù)據(jù)類型一旦被確定,不要輕易篡改~~
2. 數(shù)據(jù)類型
- 你可能仍然以為JavaScript只有 6 種數(shù)據(jù)類型(這就是固有認(rèn)知)
- 最新的 ECMAScript 標(biāo)準(zhǔn)定義了 8 種數(shù)據(jù)類型:
2.1 原始類型(6 種原始類型,使用 typeof 運(yùn)算符檢查)
- undefined:typeof instance === “undefined”
- Boolean:typeof instance === “boolean”
- Number:typeof instance === “number”
- String:typeof instance === "string"
- BigInt:typeof instance === “bigint”(任意大的整數(shù))
- Symbol :typeof instance === “symbol”
2.2 null 與 Object
- null: typeof instance === “object”
- typeof instance === “object”。
- 任何 constructed 對(duì)象實(shí)例的特殊非數(shù)據(jù)結(jié)構(gòu)類型,也用做數(shù)據(jù)結(jié)構(gòu):(new Object,new Array,new Map,new Set,new WeakMap,new WeakSet,new Date),和幾乎所有通過(guò) new 關(guān)鍵字創(chuàng)建的東西。
2.3 typeof 操作符重點(diǎn)說(shuō)明
- typeof 操作符的唯一目的就是檢查數(shù)據(jù)類型。
- 如果我們希望檢查任何從 Object 派生出來(lái)的結(jié)構(gòu)類型,使用 typeof 是不起作用的,因?yàn)榭偸菚?huì)得到 “object”。
- 檢查 Object 種類的合適方式是使用 instanceof 關(guān)鍵字(數(shù)組與對(duì)象等),但即使這樣也存在誤差(目前沒(méi)有百分百準(zhǔn)備的方法,很遺憾)
3. 原始值
3.1 原始值基本概念
- 除 Object 以外的所有類型都是不可變的(值本身無(wú)法被改變)。
- 例如,與 C 語(yǔ)言不同,JavaScript 中字符串是不可變的(JavaScript 中對(duì)字符串的操作一定返回了一個(gè)新字符串,原始字符串并沒(méi)有被改變),我們稱這些類型的值為“原始值”。
3.2 各類型說(shuō)明
- 布爾類型:一個(gè)邏輯實(shí)體,可以有兩個(gè)值:true 和 false
- Null類型:只有一個(gè)值: null,就是啥也沒(méi)有
- Undefined類型:一個(gè)沒(méi)有被賦值的變量會(huì)有個(gè)默認(rèn)值 undefined
- Number類型:沒(méi)有像Java一樣進(jìn)一步細(xì)分類型,整數(shù)和浮點(diǎn)數(shù)都可以。還有一些帶符號(hào)的值:+Infinity,-Infinity 和 NaN (非數(shù)值,Not-a-Number)
- BigInt 類型:JavaScript 中的一個(gè)基礎(chǔ)的數(shù)值類型,可以用任意精度表示整數(shù)??梢园踩卮鎯?chǔ)和操作大整數(shù),甚至可以超過(guò)數(shù)字的安全整數(shù)限制。BigInt是通過(guò)在整數(shù)末尾附加 n 或調(diào)用構(gòu)造函數(shù)來(lái)創(chuàng)建的。
語(yǔ)法:BigInt(value);
value: 創(chuàng)建對(duì)象的數(shù)值??梢允亲址蛘哒麛?shù)
BigInt() 不是構(gòu)造函數(shù),因此不能使用 new 操作符
- String類型:字符串是不可更改的。這意味著字符串一旦被創(chuàng)建,就不能被修改。但是,可以基于對(duì)原始字符串的操作來(lái)創(chuàng)建新的字符串。
獲取一個(gè)字符串的子串可通過(guò)選擇個(gè)別字母或者使用 String.substr().
兩個(gè)字符串的連接使用連接操作符 (+) 或者 String.concat().
- Symbols類型:唯一的并且是不可修改的, 并且也可以用來(lái)作為Object的key的值
- Object類型:對(duì)象可以被看作是一組屬性的集合,用對(duì)象字面量語(yǔ)法來(lái)定義一個(gè)對(duì)象時(shí),會(huì)自動(dòng)初始化一組屬性。
屬性的值可以是任意類型,包括具有復(fù)雜數(shù)據(jù)結(jié)構(gòu)的對(duì)象。屬性使用鍵來(lái)標(biāo)識(shí),它的鍵值可以是一個(gè)字符串或者符號(hào)值(Symbol)
以上就是一文帶你走進(jìn)js-數(shù)據(jù)類型與數(shù)據(jù)結(jié)構(gòu)的世界的詳細(xì)內(nèi)容,更多關(guān)于js 數(shù)據(jù)類型與數(shù)據(jù)結(jié)構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript將數(shù)組轉(zhuǎn)為對(duì)象與JSON對(duì)象字符串轉(zhuǎn)數(shù)組方法詳解
這篇文章主要介紹了JavaScript將數(shù)組轉(zhuǎn)為對(duì)象與JSON對(duì)象字符串轉(zhuǎn)數(shù)組方法詳解,需要的朋友可以參考下2022-10-10使用Script元素發(fā)送JSONP請(qǐng)求的方法
下面小編就為大家?guī)?lái)一篇使用Script元素發(fā)送JSONP請(qǐng)求的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06JavaScript SetInterval與setTimeout使用方法詳解
本文講解了JavaScript SetInterval與setTimeout的區(qū)別,并用代碼示例演示了使用方法2013-11-11JavaScript入門(mén)教程(6) Window窗口對(duì)象
他是JavaScript中最大的對(duì)象,它描述的是一個(gè)瀏覽器窗口。一般要引用它的屬性和方法時(shí),不需要用“window.xxx”這種形式,而直接使用“xxx”。一個(gè)框架頁(yè)面也是一個(gè)窗口。2009-01-01JavaScript中用let語(yǔ)句聲明作用域的用法講解
首先要注意let是ES6中的東西,起碼是IE10之前的IE瀏覽器兼容要千萬(wàn)當(dāng)心!嗯...然后我們來(lái)看JavaScript中用let語(yǔ)句聲明作用域的用法講解2016-05-05關(guān)于可運(yùn)行代碼無(wú)法正常執(zhí)行的使用說(shuō)明
腳本之家網(wǎng)站為了方便大家快速的查看效果,只要大家運(yùn)行一下代碼即可能看到效果。2010-05-05詳細(xì)解讀JavaScript編程中的Promise使用
這篇文章主要介紹了詳細(xì)解讀JavaScript編程中的Promise使用,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-07-07