切換語言為:簡體

JavaScript 中的 6 種資料型別分類以及判斷方法

  • 爱糖宝
  • 2024-07-02
  • 2075
  • 0
  • 0

在 JavaScript 中,一共有 6 種資料型別(不包含 ES6 新增的 Symbol 和 BigInt )。這 6 種類型可劃分爲原始資料型別(又稱基本資料型別)和引用型別(又稱物件型別)。本文對其進行大致的介紹,每個型別具體的使用會在後續幾篇文章中進行詳細說明。

1.原始型別

  • 字串(string):文字(比如 Hello World)。

  • 數值(number):整數和小數(比如 1 和 3.14)。

  • 布林值(Boolean),有 2 個值分別是:true 和 false。

  • null,一個表明空值的特殊關鍵字。JavaScript 是大小寫敏感的,因此 null 與 Null、NULL 或其他格式的變體完全不同。

  • undefined,和 null 一樣是一個特殊的關鍵字,undefined 表示“未定義”或不存在。是變數還未賦值時的屬性。

對於原始型別來說,它們的值儲存在棧中,直接可以進行操作。例如:

var a = 10 ;
var b = a ;
b = 20 ;
console.log(a); // 10


JavaScript 中的 6 種資料型別分類以及判斷方法

2.引用型別

包含了陣列(Array)、物件(object)、函式(function)、日期物件(Date)、正規表示式(RegExp)等。需要注意的是,引用資料型別是儲存在棧記憶體和堆記憶體中的物件。在 JavaScript 中,你不可以直接訪問堆記憶體中的位置或操作堆記憶體空間,只能操作物件儲存在棧記憶體中的地址。例如:

var obj1 = {}
var obj2 = obj1;
obj2.name = "orange";
console.log(obj1.name); //orange


可以看到明明在建立了一個空的 obj1 物件,但是在 obj2 中新增name屬性後再次列印 obj1 原先不存在的name屬性,也可以列印出來。從下面兩張圖中可以看到由於 obj2 儲存的是 obj1 在堆記憶體中的地址,所以在其更改時 obj1 自然而然的能列印出name屬性 這就是上述提到的引用型別與原始資料型別的區別了。

JavaScript 中的 6 種資料型別分類以及判斷方法

JavaScript 中的 6 種資料型別分類以及判斷方法

3.型別判斷

在 JavaScript 中,常見的有三種用於判斷資料型別的方法

typeof 運算子

該方法一般用來判斷基本資料型別,返回資料型別的字串形式。可以返回 string,number,boolean,symbol,bigint,unfined,object,function 這⼋種類型。Typeof 運算子常用在判斷語句中,例如:

if(typeof === 'string'){
    console.log('該型別為string型別')
}


//舉幾個typeof運算子的例子:
typeof "helloworld"; //"string"
typeof 123; //"number"
typeof true; //"boolean"
typeof undefined; //"undefined"
typeof function () {}; //"function"
typeof {}; //"object"
typeof Symbol(); //"symbol"
typeof null; //"object"
typeof [1,2,3]; //"object"
typeof new Date(); //"object"
typeof new RegExp(); //"object"
typeof Null //"undefined


這裏我們可以看到typeof null === "object"而不是null,這是因為在 JavaScript 中,不同的物件都是使用⼆進位制儲存的,如果⼆進位制前三位都是 0 的話,系統會判斷為是 Object 型別,而 null 的⼆進位制全是 0,⾃然也就判斷為 Object。

instanceof 運算子

該運算子用於判斷引用資料型別,判斷原始資料型別時基本無效。

  • 可以判斷⼀個例項是否屬於某種型別

  • 可以判斷⼀個例項是否是其⽗型別或者祖先型別

[] instanceof Array; // true
[] instanceof Object; // true
new Date() instanceof Date // true

Object.prototype.toString.call

該方法是使用了 Object 原型物件上的toString⽅法,該⽅法預設返回其調⽤者的具體型別,返回的格式為為[object,xxx],xxx 是具體的資料型別。其中包括:String, Number,Boolean,Undefined,Null,Function,Date,Array,RegExp 等等基本上所有物件的型別都可以透過這個⽅法獲取到。這裏簡單對其進行介紹,後續文章還會詳細說明。以下列舉常見資料型別的 Object.prototype.toString 方法返回的值:

數值:  Object.prototype.toString.call(123) //"[object Number]"
字串:  Object.prototype.toString.call("a") //"[object String]"
布林值:  Object.prototype.toString.call(false) //"[object Boolean]"
undefined:  Object.prototype.toString.call(undefined) //"[object Undefined]"
null:   Object.prototype.toString.call(null) //"[object Null]"
陣列:   Object.prototype.toString.call([]) //"[object Array]"
日期物件:   Object.prototype.toString.call(new Date()) //"[object Date]"
函式:   Object.prototype.toString.call(function(){}) //"[object Function]"
RegExp物件: Object.prototype.toString.call(new RegExp("ab+c", "i")) //"[object RegExp]"

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.