JavaScript typeof
typeof 運算子
typeof 運算子返回 JavaScript 變數的資料型別。
原始資料型別
在 JavaScript 中,原始值是沒有任何屬性或方法的單個值。
JavaScript 有 7 種原始資料型別
- string
- 數字
- boolean
- bigint
- symbol
- null
- undefined
typeof
運算子返回變數或表示式的型別。
示例
typeof "John" // 返回 string
typeof ("John"+"Doe") // 返回 string
typeof 3.14 // 返回 number
typeof 33 // 返回 number
typeof (33 + 66) // 返回 number
typeof true // 返回 boolean
typeof false // 返回 boolean
typeof 1234n // 返回 bigint
typeof Symbol() // 返回 symbol
typeof x // 返回 undefined
自己動手試一試 »
typeof null // 返回 object
自己動手試一試 »
注意
在 JavaScript 中,null
是一個原始值。然而,typeof
返回 "object"。
這是一個 JavaScript 中眾所周知的 bug,並且有歷史原因。
複雜資料型別
複雜資料型別可以儲存多個值和/或不同的資料型別。
JavaScript 有一種複雜資料型別
- object
所有其他複雜型別,如陣列、函式、Set 和 Map,都只是不同型別的物件。
typeof
運算子只返回兩種型別
- object
- function
示例
typeof {name:'John'} // 返回 object
typeof [1,2,3,4] // 返回 object
typeof new Map() // 返回 object
typeof new Set() // 返回 object
typeof function (){} // 返回 function
自己動手試一試 »
注意
typeof
運算子對所有型別的物件都返回 object
- 物件
- 陣列
- 集合
- 對映
您不能使用 typeof
來判斷 JavaScript 物件是陣列還是日期。
如何識別陣列
如何判斷一個變數是否是陣列?
ECMAScript 5 (2009) 為此定義了一個新方法:Array.isArray()
instanceof 運算子
instanceof
運算子返回 true
,如果一個物件是指定物件型別的一個例項
示例
// 建立一個 Date
const time = new Date();
(time instanceof Date);
自己動手試一試 »
// 建立一個數組
const fruits = ["apples", "bananas", "oranges"];
(fruits instanceof Array);
自己動手試一試 »
// 建立一個 Map
const fruits = new Map([
["apples", 500],
["bananas", 300],
["oranges", 200]
]);
(fruits instanceof Map);
自己動手試一試 »
// 建立一個 Set
const fruits = new Set(["apples", "bananas", "oranges"]);
(fruits instanceof Set);
自己動手試一試 »
未定義變數
未定義變數的 typeof
是 undefined
。
沒有值的變數的 typeof
是 undefined
。其值也是 undefined
。
任何變數都可以透過將其值設定為 undefined
來清空。
型別也將是 undefined
。
空值
空值與 undefined
無關。
空字串既有合法值,也有型別。
Null
在 JavaScript 中,null
是“空無一物”。它被認為是根本不存在的東西。
不幸的是,在 JavaScript 中,null
的資料型別是物件。
您可以透過將物件設定為 null
來清空它
示例
// 建立一個物件
let person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
person = null;
// 現在值是 null,但型別仍然是物件
自己動手試一試 »
您也可以透過將物件設定為 undefined
來清空它
示例
let person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
person = undefined;
// 現在值和型別都是 undefined
自己動手試一試 »
Undefined 和 Null 的區別
undefined
和 null
在值上相等,但在型別上不同
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
自己動手試一試 »
constructor 屬性
constructor
屬性返回所有 JavaScript 變數的建構函式。
示例
// 返回 function Object() {[native code]}
{name:'John',age:34}.constructor
// 返回 function Array() {[native code]}
[1,2,3,4].constructor
// 返回 function Date() {[native code]}
new Date().constructor
// 返回 function Set() {[native code]}
new Set().constructor
// 返回 function Map() {[native code]}
new Map().constructor
// 返回 function Function() {[native code]}
function () {}.constructor
自己動手試一試 »
使用 constructor,您可以檢查一個物件是否是 Array
使用 constructor,您可以檢查一個物件是否是 Date
總覽
typeof "John" // 返回 "string"
typeof ("John"+"Doe") // 返回 "string"
typeof 3.14 // 返回 "number"
typeof (33 + 66) // 返回 "number"
typeof NaN // 返回 "number"
typeof 1234n // 返回 "bigint"
typeof true // 返回 "boolean"
typeof false // 返回 "boolean"
typeof {name:'John'} // 返回 "object"
typeof [1,2,3,4] // 返回 "object"
typeof {} // 返回 "object"
typeof [] // 返回 "object"
typeof new Object() // 返回 "object"
typeof new Array() // 返回 "object"
typeof new Date() // 返回 "object"
typeof new Set() // 返回 "object"
typeof new Map() // 返回 "object"
typeof function () {} // 返回 "function"
typeof x // 返回 "undefined"
typeof null // 返回 "object"
自己動手試一試 »
注意
NaN (非數字) 的資料型別是 number !
void 運算子
void 運算子評估一個表示式並返回 undefined。該運算子常用於獲取 undefined 原始值,使用 "void(0)"(在評估表示式而不使用返回值時很有用)。
示例
<a href="javascript:void(0);">
無用連結
</a>
<a href="javascript:void(document.body.style.backgroundColor='red');">
點選我將背景顏色改為紅色
</a>
自己動手試一試 »