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。

親自試一試

空值

空值與 undefined 無關。

空字符串既有合法值又有類型。

實例

let car = "";    // 值是 "",類型是 "string"

親自試一試

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 的區別

undefinednull 值相等但類型不同:

typeof undefined           // undefined
typeof null                // object
null === undefined         // false
null == undefined          // true

親自試一試