基本數據類型
對于基本類型在創建時無需使用
new
關鍵字
Bigint在實際開發不常用,如果對于精度要求高可以使用第三方庫,如decimal.js
基本數據類型介紹
undefined
:當變量被聲明但未賦值,或者函數沒有返回值時,就會呈現 undefined 狀態。null
:null 代表一個空值,它是一個人為設定的空對象指針。number
:該類型用于表示整數和浮點數。JavaScript 里沒有專門區分整數和浮點數的類型。string
:字符串是由零個或多個字符組成的序列,可使用單引號、雙引號或者反引號來表示。symbol
:這是 ES6 引入的新類型,symbol 是獨一無二且不可變的數據類型,常被用作對象屬性的鍵。BigInt
:BigInt 是 ES2020 引入的一種新的基本數據類型,用于表示任意大的整數。在 JavaScript 中,Number 類型只能安全地表示 -(2^53 - 1) 到 2^53 - 1 之間的整數,超出這個范圍的整數運算會出現精度丟失問題,而 BigInt 就可以解決這個問題。
基本數據類型判別方法
typeof
console.log(typeof undefined); // 輸出: 'undefined'
console.log(typeof null); // 輸出: 'object',這是 JavaScript 的一個歷史遺留問題
console.log(typeof true); // 輸出: 'boolean'
console.log(typeof 123); // 輸出: 'number'
console.log(typeof 'hello'); // 輸出: 'string'
console.log(typeof Symbol('key')); // 輸出: 'symbol'
console.log(typeof 123n); // 輸出: 'bigint'
instanceof
instanceof 運算符用于檢測構造函數的 prototype 屬性是否出現在某個實例對象的原型鏈上。可以用來判斷值是否為 Boolean、Number、String 的包裝對象。
// 示例代碼
let boolObj = new Boolean(true);
let numObj = new Number(123);
let strObj = new String('hello');console.log(boolObj instanceof Boolean); // 輸出: true
console.log(numObj instanceof Number); // 輸出: true
console.log(strObj instanceof String); // 輸出: true
最重要: Object.prototype.toString.call()
- Object.prototype.toString 方法
在 JavaScript 中,每個對象都繼承自 Object.prototype,Object.prototype 里有一個 toString 方法。該方法的原始用途是返回一個能反映對象類型的字符串。
對于 Object 類型的對象,toString 方法會返回一個形如 [object Type] 的字符串,其中 Type 代表對象的具體類型。比如,Object 類型的對象返回 [object Object]。 - 不同對象對 toString 方法的重寫
很多內置對象(像 Array、Date、Function 等)都對 toString 方法進行了重寫,以滿足自身的需求。
Array 對象的 toString 方法會把數組元素轉換為字符串并用逗號連接起來。
Date 對象的 toString 方法會返回一個表示日期和時間的字符串。const arr = [1, 2, 3]; console.log(arr.toString()); // 輸出: 1,2,3
const date = new Date(); console.log(date.toString()); // 輸出類似: Tue Apr 09 2024 14:30:00 GMT+0800 (中國標準時間)
- 使用 call 方法改變 this 指向
由于很多對象重寫了 toString 方法,所以若要調用 Object.prototype 上原始的 toString 方法,就需要借助 call 方法來改變 this 指向。
call 方法能讓我們在調用函數時指定函數內部的 this 值。當使用 Object.prototype.toString.call(obj) 時,就把 Object.prototype.toString 方法里的 this 指向了 obj,這樣就能調用原始的 toString 方法,從而得到對象類型的詳細信息。
// 判斷 undefined
console.log(Object.prototype.toString.call(undefined)); // 輸出: [object Undefined]// 判斷 null
console.log(Object.prototype.toString.call(null)); // 輸出: [object Null]// 判斷布爾類型
console.log(Object.prototype.toString.call(true)); // 輸出: [object Boolean]// 判斷數字類型
console.log(Object.prototype.toString.call(123)); // 輸出: [object Number]// 判斷字符串類型
console.log(Object.prototype.toString.call('hello')); // 輸出: [object String]// 判斷 Symbol 類型
console.log(Object.prototype.toString.call(Symbol('key'))); // 輸出: [object Symbol]// 判斷 BigInt 類型
console.log(Object.prototype.toString.call(123n)); // 輸出: [object BigInt]// 判斷數組類型
const arr = [1, 2, 3];
console.log(Object.prototype.toString.call(arr)); // 輸出: [object Array]// 判斷日期類型
const date = new Date();
console.log(Object.prototype.toString.call(date)); // 輸出: [object Date]
引用數據類型
引用數據類型介紹
Object
:Object 是 JavaScript 中最基礎的引用數據類型,可用于存儲鍵值對,是其他對象的基礎,許多復雜的數據結構都基于它構建。
const person = {name: 'John',age: 30
};
Array
:Array 用于存儲有序的數據集合,元素可以是不同的數據類型,并且可以動態調整長度。
const numbers = [1, 2, 3, 4, 5];
Function
:Function 用于封裝可重復使用的代碼塊,可接受參數并返回值,還可以作為參數傳遞給其他函數,或者作為返回值返回。
function add(a, b) {return a + b;
}
Date
:Date 用于處理日期和時間,提供了一系列方法來獲取和設置日期、時間的各個部分。
const now = new Date();
RegExp
:RegExp 用于處理正則表達式,可用于字符串的匹配、替換、分割等操作。
const pattern = /abc/;
引用數據類型判別方法
最重要: Object.prototype.toString.call()
console.log(Object.prototype.toString.call({})); // 輸出: '[object Object]'
console.log(Object.prototype.toString.call([])); // 輸出: '[object Array]'
console.log(Object.prototype.toString.call(function() {})); // 輸出: '[object Function]'
console.log(Object.prototype.toString.call(new Date())); // 輸出: '[object Date]'
console.log(Object.prototype.toString.call(/abc/)); // 輸出: '[object RegExp]'