tft每日頭條

 > 科技

 > javascript有多少種數據類型

javascript有多少種數據類型

科技 更新时间:2025-02-04 18:53:13

  本文首發自「慕課網」,想了解更多IT幹貨内容,程序員圈内熱聞,歡迎關注!

  作者| 慕課網精英講師 Lison

  這篇文章我們了解一下 JavaScript 中現有的八個數據類型,當然這并不是 JavaScript 中的所有數據類型,而是現在版本的 TypeScript 支持的基本類型,在學習基礎類型之前,我們先來看下如何為一個變量指定類型:

  為一個變量指定類型的語法是使用變量: 類型的形式,如下:

  let num: number = 123

  如果你沒有為這個變量指定類型,編譯器會自動根據你賦給這個變量的值來推斷這個變量的類型:

  let num = 123 num = abc // error 不能将類型“123”分配給類型“Number”

  當我們給num賦值為123但沒有指定類型時,編譯器推斷出了num的類型為number數值類型,所以當給num再賦值為字符串abc時,就會報錯。

  這裡還有一點要注意,就是numberNumber的區别:TS中指定類型的時候要用number,這個是TypeScript的類型關鍵字。而Number為JavaScript的原生構造函數,用它來創建數值類型的值,它倆是不一樣的。包括你後面見到的stringboolean等都是TypeScript的類型關鍵字,不是JavaScript語法,這點要區分開。接下來我們來看下,這八個JS中你見過的類型

  2.1.1 布爾類型 類型為布爾類型的變量的值隻能是 true 或 false,如下:

  let bool: boolean = false; bool = true; bool = 123; // error 不能将類型123分配給類型boolean

  當然了,賦給 bool 的值也可以是一個計算之後結果是布爾值的表達式,比如:

  let bool: boolean = !!0 console.log(bool) // false

  2.1.2 數值類型 TypeScript 和 JavaScript 一樣,所有數字都是浮點數,所以隻有一個number類型,而沒有int或者float類型。而且 TypeScript 還支持 ES6 中新增的二進制和八進制數字字面量,所以 TypeScript 中共支持二、八、十和十六四種進制的數值。

  let num: number; num = 123; num = 123 // error 不能将類型123分配給類型number num = 0b1111011; // 二進制的123 num = 0o173; // 八進制的123 num = 0x7b; // 十六進制的123

  2.1.3 字符串 字符串類型中你可以使用單引号和雙引号包裹内容,但是可能你使用的 tslint 規則會對引号進行檢測,使用單引号還是雙引号可以在 tslint 規則裡配置。你還可以使用 ES6 語法——模闆字符串,拼接變量和字符串更為方便。

  let str: string = Lison str = ; const first = Lison const last = ; str = `${first} ${last}`; console.log(str) // 打印結果為:Lison Li

  另外還有個和字符串相關的類型:字符串字面量類型。即把一個字符串字面量作為一種類型,比如上面的字符串Lison,當你把一個變量指定為這個字符串類型的時候,就不能再賦值為其他字符串值了,如:

  let str: Lison str = haha // error 不能将類型“haha”分配給類型“Lison”

  2.1.4 數組 在 TypeScript 中有兩種定義數組的方式:

  let list1: number[] = [1, 2, 3]; let list2: Arraynumber = [1, 2, 3];

  第一種形式通過number[]的形式來指定這個類型元素均為number類型的數組類型,這種寫法是推薦的寫法,當然你也可以使用第二種寫法。注意,這兩種寫法中的number指定的是數組元素的類型,你也可以在這裡将數組的元素指定為任意類型。如果你要指定一個數組裡的元素既可以是數值也可以是字符串,那麼你可以使用這種方式:number|string[],這種方式我們在後面學習聯合類型的時候會講到。

  當你使用第二種形式定義時,tslint 可能會警告讓你使用第一種形式定義,如果你就是想用第二種形式,可以通過在 tslint.json 的 rules 中加入array-type: [false]關閉 tslint 對這條的檢測。

  後面我們講接口的時候,還會講到數組的一個特殊類型:ReadonlyArray,即隻讀數組。

  2.1.5 null 和 undefined null 和 undefined 有一些共同特點,所以我們放在一起講。說它們有共同特點,是因為在 JavaScript 中,undefined 和 null 是兩個基本數據類型。在 TypeScript 中,這兩者都有各自的類型即 undefined 和 null,也就是說它們既是實際的值,也是類型,來看實際例子:

  let u: undefined = undefined;// 這裡可能會報一個tslint的錯誤:Unnecessary initialization to undefined,就是不能給一個值賦undefined,但我們知道這是可以的,所以如果你的代碼規範想讓這種代碼合理化,可以配置tslint,将no-unnecessary-initializer設為false即可 let n: null = null;

  默認情況下 undefined 和 null 可以賦值給任意類型的值,也就是說你可以把 undefined 賦值給 void 類型,也可以賦值給 number 類型。當你在 tsconfig.json 的compilerOptions裡設置了strictNullChecks: true時,那必須嚴格對待。undefined 和 null 将隻能賦值給它們自身和 void 類型,void類型我們後面會學習。

  2.1.6 object object 在 JS 中是引用類型,它和 JS 中的其他基本類型不一樣,像 number、string、boolean、undefined、null 這些都是基本類型,這些類型的變量存的是他們的值,而 object 類型的變量存的是引用,看個簡單的例子:

  let strInit = abc let strClone = strInit; strClone = efg console.log(strInit); // abc let objInit = { a: }; let objClone = objInit; console.log(objClone) // {a:} objInit.a = ; console.log(objClone); // { a: }

  通過例子可以看出,我們修改 objInit 時,objClone 也被修改了,是因為 objClone 保存的是 objInit 的引用,實際上 objInit 和 objClone 是同一個對象。

  當我們希望一個變量或者函數的參數的類型是一個對象的時候,使用這個類型,比如:

  let obj: object obj = { name: Lison } obj = 123 // error 不能将類型“123”分配給類型“object”

  這裡有一點要注意了,你可能會想到給 obj 指定類型為 object 對象類型,然後給它賦值一個對象,後面通過屬性訪問操作符訪問這個對象的某個屬性,實際操作一下你就會發現會報錯:

  let obj: object obj = { name: Lison } console.log(obj.name) // error 類型“object”上不存在屬性“name”

  這裡報錯說類型 object 上沒有 name 這個屬性。如果你想要達到這種需求你應該使用我們後面章節要講到的接口,那 object 類型适合什麼時候使用呢?我們前面說了,當你希望一個值必須是對象而不是數值等類型時,比如我們定義一個函數,參數必須是對象,這個時候就用到object類型了:

  function getKeys (obj: object) { return Object.keys(obj) // 會以列表的形式返回obj中的值 } getKeys({ a: }) // [] getKeys(123) // error 類型“123”的參數不能賦給類型“object”的參數

  這裡你要明白object類型的使用。

  2.1.6 Symbol symbol 是 ES6 加入的新的基礎數據類型,因為它的知識比較多。

  本節小結 本篇文章我們總結了八個在JavaScript中我們就見過的數據類型,它們是:布爾類型、數值類型、字符串、數組、null、undefined、object以及ES6中新增的symbol。在TypeScript中它們都有對應的類型關鍵字,對應關系為:

  布爾類型:boolean數值類型:number字符串類型:string數組:Array或type[]對象類型:objectSymbol類型:symbolnull和undefined:null 和 undefined,這個比較特殊,它們自身即是類型 這些類型是基礎,我們後面的高級類型很多都是它們的組合或者變形,所以一定要把這些基礎先學會。

  javascript有多少種數據類型(JavaScript中常用數據類型)(1)

  歡迎關注「慕課網」,發現更多IT圈優質内容,分享幹貨知識,幫助你成為更好的程序員!

  ,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved