# typeof 運算符
JavaScript 中的 `typeof` 是一個一元運算符,用於確定給定值的數據類型(類型)。它不是一個函數,而是一個操作符,因此你可以直接將其與值一起使用,而不需要使用括號。 `typeof` 運算符返回一個表示值數據類型的字符串。
## 基本用法
下面是一些示例,演示了 `typeof` 運算符的基本用法:
```javascript
typeof 42; // 返回 "number"
typeof "Hello, world!"; // 返回 "string"
typeof true; // 返回 "boolean"
typeof null; // 返回 "object"(這是一個歷史遺留問題)
typeof undefined; // 返回 "undefined"
typeof [1, 2, 3]; // 返回 "object"
typeof { name: "John", age: 30 }; // 返回 "object"
typeof function() {}; // 返回 "function"
```
`typeof` 運算符通常用於條件語句中進行類型檢查或根據數據類型執行不同的操作。
## Array \ Object \ null
雖然 `typeof` 運算符是一種快速檢查值類型的方法,但需要注意以下幾個注意事項:
1. **null 類型問題:** 由於 JavaScript 的歷史原因,`typeof null` 返回 `"object"`,這是一個設計上的錯誤。因此,當使用 `typeof` 檢查值是否為 `null` 時,要格外小心。
2. **數組和對像類型:** 數組和普通對像都被視為對像類型,因此它們的 `typeof` 結果都是 `"object"`。要區分數組和對象,通常需要使用其他方法,如 `Array.isArray()` 來檢查是否為數組。
3. **函數類型:** 函數是一種特殊的對象,但 `typeof` 運算符將函數類型識別為 `"function"`,因此可以使用 `typeof` 來檢查函數類型。
## 進一步型別確認
要進行更準確的類型檢查,通常建議使用以下方法:
1. **用 `Array.isArray()` 檢查是否為陣列**
```javascript
const arr = [1, 2, 3];
if (Array.isArray(arr)) {
console.log('arr 是數組類型');
} else {
console.log('arr 不是數組類型');
}
```
2. **用 `instanceof` 檢查是否為物件類型**
```javascript
const obj = { name: "Alice" };
if (obj instanceof Object) {
console.log('obj 是物件類型');
} else {
console.log('obj 不是物件類型');
}
```
3. **用嚴格相等運算符 `===`檢查是否為null類型**
```javascript
const value = null;
if (value === null) {
console.log('value 是 null');
} else {
console.log('value 不是 null');
}
```