JavaScript typeof
JavaScript typeof
在 JavaScript 中有 5 種不同的可以包含值的數據類型:
string
number
boolean
object
function
有 6 種類型的對象:
Object
Date
Array
String
Number
Boolean
以及 2 種不能包含值的數據類型:
null
undefined
typeof 運算符
您可以使用 typeof
運算符來確定 JavaScript 變量的數據類型。
實例
typeof "Bill" // 返回 "string" typeof 3.14 // 返回 "number" typeof NaN // 返回 "number" typeof false // 返回 "boolean" typeof [1,2,3,4] // 返回 "object" typeof {name:'Bill', age:19} // 返回 "object" typeof new Date() // 返回 "object" typeof function () {} // 返回 "function" typeof myCar // 返回 "undefined" * typeof null // 返回 "object"
請注意:
- NaN 的數據類型是數字
- 數組的數據類型是對象
- 日期的數據類型是對象
- null 的數據類型是 object
- 未定義變量的數據類型為 undefined *
- 未賦值的變量的數據類型也是 undefined *
您無法使用 typeof
來確定 JavaScript 對象是否是數組(或日期)。
原始日期
原始數據值指的是沒有附加屬性和方法的單個簡單數據值。
typeof
運算符可以返回以下原始類型之一:
string
number
boolean
undefined
實例
typeof "Bill" // 返回 "string" typeof 3.14 // 返回 "number" typeof true // 返回 "boolean" typeof false // 返回 "boolean" typeof x // 返回 "undefined" (if x has no value)
復雜數據
typeof
運算符可以返回兩種復雜類型之一:
function
object
typeof
運算符會為對象、數組和 null 返回 "object"。
typeof
運算符不會為函數返回 "object"。
實例
typeof {name:'Bill', age:19} // 返回 "object" typeof [1,2,3,4] // 返回 "object"(非 "array",請注意下面的例子) typeof null // 返回 "object" typeof function myFunc(){} // 返回 "function"
typeof
運算符會為數組返回 "object"
,因為在 JavaScript 中數組是對象。
typeof 的數據類型
typeof
運算符并不是變量。它只是一個運算符。運算符 (+ - * /) 沒有任何數據類型。
但是,typeof
運算符總是返回字符串(包含操作數的類型)。
constructor 屬性
constructor
屬性返回所有 JavaScript 變量的構造函數。
實例
"Bill".constructor // 返回 function String() {[native code]} (3.14).constructor // 返回 function Number() {[native code]} false.constructor // 返回 function Boolean() {[native code]} [1,2,3,4].constructor // 返回 function Array() {[native code]} {name:'Bill',age:19}.constructor // 返回 function Object() {[native code]} new Date().constructor // 返回 function Date() {[native code]} function () {}.constructor // 返回 function Function(){[native code]}
您可以檢查 constructor 屬性以確定對象是否為數組(包含 "Array"
一詞):
實例
function isArray(myArray) { return myArray.constructor.toString().indexOf("Array") > -1; }
或者更簡單,您可以檢查對象是否為數組函數:
實例
function isArray(myArray) { return myArray.constructor === Array; }
您可以檢查 constructor 屬性以確定對象是否為日期(包含 "Date"
一詞):
實例
function isDate(myDate) { return myDate.constructor.toString().indexOf("Date") > -1; }
或者更簡單,您可以檢查對象是否為日期函數:
實例
function isDate(myDate) { return myDate.constructor === Date; }
Undefined
在 JavaScript 中,沒有值的變量的值是 undefined
。類型也是 undefined
。
實例
let car; // 值是 undefined,類型也是 undefined。
通過將其值設置為 undefined
,可以清空任何變量。類型也將是 undefined
。
實例
car = undefined; // 值是 undefined,類型也是 undefined。
Null
在 JavaScript 中 null
即是“無”。它應該是不存在的東西。
不幸的是,在 JavaScript 中,null
的數據類型是一個對象。
你可以認為它是 JavaScript 中的一個 bug,typeof null
是一個對象。類型應為 null
。
您可以通過將對象設置為 null
來清空對象:
實例
let person = {firstName:"Bill", lastName:"Gates", age:19, eyeColor:"blue"}; person = null; // 現在值為 null,但類型仍然是對象
您還可以通過將對象設置為 undefined
來清空對象:
實例
let person = {firstName:"Bill", lastName:"Gates", age:19, eyeColor:"blue"}; person = undefined; // 現在值和類型都是未定義
undefined 與 null 的區別
undefined
和 null
值相等但類型不同:
typeof undefined // undefined typeof null // object null === undefined // false null == undefined // true