JavaScript 資料型別

在本教程中,你將瞭解 JavaScript 中可用的資料型別。

JavaScript 中的資料型別

資料型別基本上指定了在程式中可以儲存和操作的資料型別。

JavaScript 中有六種基本資料型別,可分為三大類:原始(或主要),複合 (或引用)和特殊資料型別。 StringNumberBoolean 是原始資料型別。物件,陣列和函式(所有型別的物件)都是複合資料型別。而 UndefinedNull 是特殊資料型別。

原始資料型別一次只能包含一個值,而複合資料型別可以包含值集合和更復雜的實體。讓我們詳細討論它們中的每一個。

字串資料型別

字串資料型別用於表示文字的資料(即字元的序列)。使用圍繞一個或多個字元的單引號或雙引號建立字串,如下所示:

var a = 'Hi there!';  // using single quotes
var b = "Hi there!";  // using double quotes

你可以在字串中包含引號,只要它們與封閉引號不匹配即可。

var a = "Let's have a cup of coffee."; // single quote inside double quotes
var b = 'He said "Hello" and left.';  // double quotes inside single quotes
var c = 'We\'ll never give up.';     // escaping single quote with backslash

你將在 JavaScript 字串章節中瞭解有關字串的更多資訊。

數字資料型別

數字資料型別用於有或沒有小數位來表示正數或負數,或使用指數表示法比如 1.5E-4 所表示的號碼(相當於 1.5×10 -4)。

var a = 25;         // integer
var b = 80.5;       // floating-point number
var c = 4.25e+6;    // exponential notation, same as 4.25e6 or 4250000
var d = 4.25e-6;    // exponential notation, same as 0.00000425

數字資料型別還包括一些特殊值: Infinity-InfinityNaN 。無窮大代表數學無窮大 ,它比任何數字都大。無窮大是將非零數字除以 0 的結果,如下所示:

alert(16 / 0);  // Output: Infinity
alert(-16 / 0); // Output: -Infinity
alert(16 / -0); // Output: -Infinity

NaN 代表一個特殊的非數字值。它是無效或未定義的數學運算的結果,例如取平方根為-1 或將 0 除以 0 等。

alert("Some text" / 2);       // Output: NaN
alert("Some text" / 2 + 10);  // Output: NaN
alert(Math.sqrt(-1));         // Output: NaN

你將在 JavaScript 數字章節中瞭解有關數字的更多資訊。

布林資料型別

布林資料型別只能包含兩個值: truefalse 。它通常用於儲存 yes(true)或 no(false),on(true)或 off(false) 等值,如下所示:

var isReading = true;   // yes, I'm reading
var isSleeping = false; // no, I'm not sleeping

布林值也是程式中比較的結果。以下示例比較兩個變數,並在警告對話方塊中顯示結果:

var a = 2, b = 5, c = 10;
 
alert(b > a) // Output: true
alert(b > c) // Output: false

你將在 JavaScript if / else 章節中瞭解有關 JavaScript 比較的更多資訊。

未定義的資料型別

未定義的資料型別只能有一個值 - 特殊值 undefined 。如果已宣告變數但尚未賦值,則具有該值 undefined

var a;
var b = "Hello World!"
 
alert(a) // Output: undefined
alert(b) // Output: Hello World!

空資料型別

這是另一種特殊資料型別,只能有一個值 - null 值。一個 null 值意味著沒有價值。它不等於空字串("")或 0,它根本就沒有資料。

變數可以通過賦值來明確地清空其當前內容 null

var a = null;
alert(a); // Output: null
 
var b = "Hello World!"
alert(b); // Output: Hello World!
 
b = null;
alert(b) // Output: null

物件資料型別

object 是一種複雜的資料型別,允許你儲存資料集合。

物件包含定義為鍵值對的屬性。屬性鍵(name)始終是一個字串,但該值可以是任何資料型別,如字串、數字、布林值或複雜資料型別,如陣列、函式和其他物件。你將在後續章節中瞭解有關物件的更多資訊。

以下示例將向你展示在 JavaScript 中建立物件的最簡單方法。

var emptyObject = {};
var person = {"name": "Clark", "surname": "Kent", "age": "36"};
 
// For better reading
var car = {
    "modal": "BMW X3",
    "color": "white",
    "doors": 5
}

如果名稱是有效的 JavaScript 名稱,則可以省略屬性名稱周圍的引號。這意味著 first-name 需要引號,但是 firstname 引號是可選的。所以上面例子中的 car 物件也可以寫成:

var car = {
    modal: "BMW X3",
    color: "white",
    doors: 5
}

你將在 JavaScript 物件章節中瞭解有關物件的更多資訊。

陣列資料型別

陣列是一種用於在單個變數中儲存多個值的物件。陣列中的每個值(也稱為元素)都有一個數字位置,稱為索引,它可能包含任何資料型別的資料 - 數字、字串、布林值、函式、物件甚至其他陣列。陣列索引從 0 開始,因此第一個陣列元素 arr[0] 不是 arr[1]

建立陣列的最簡單方法是將陣列元素指定為用方括號括起來的逗號分隔列表,如下例所示:

var colors = ["Red", "Yellow", "Green", "Orange"];
var cities = ["London", "Paris", "New York"];
 
alert(colors[0]);   // Output: Red
alert(cities[2]);   // Output: New York

你將在 JavaScript 陣列 章節中瞭解有關陣列的更多資訊。

函式資料型別

函式是執行程式碼塊的可呼叫物件。由於函式是物件,因此可以將它們分配給變數,如下例所示:

var greeting = function(){ 
    return "Hello World!"; 
}
 
// Check the type of greeting variable
alert(typeof greeting) // Output: function
alert(greeting());     // Output: Hello World!

實際上,函式可以在任何地方使用,可以使用任何其他值。函式可以儲存在變數,物件和陣列中。函式可以作為引數傳遞給其他函式,函式可以從函式返回。考慮以下功能:

function createGreeting(name){
    return "Hello, " + name;
}
function displayGreeting(greetingFunction, userName){
    return greetingFunction(userName);
}
 
var result = displayGreeting(createGreeting, "Peter");
alert(result); // Output: Hello, Peter

你將在 JavaScript 函式章節中瞭解有關函式的更多資訊。

運算子的型別

typeof 操作符可以用來找出什麼型別的變數或運算元包含的資料。它可以帶括號或不帶括號(typeof(x)typeof x)使用。

typeof 當你需要以不同方式處理不同型別的值時,操作符特別有用,但你需要非常小心,因為在某些情況下它可能會產生意外結果,如以下示例所示:

// Numbers
typeof 15;  // Returns: "number"
typeof 42.7;  // Returns: "number"
typeof 2.5e-4;  // Returns: "number"
typeof Infinity;  // Returns: "number"
typeof NaN;  // Returns: "number". Despite being "Not-A-Number"
 
// Strings
typeof '';  // Returns: "string"
typeof 'hello';  // Returns: "string"
typeof '12';  // Returns: "string". Number within quotes is typeof string
 
// Booleans
typeof true;  // Returns: "boolean"
typeof false;  // Returns: "boolean"
 
// Undefined
typeof undefined;  // Returns: "undefined"
typeof undeclaredVariable; // Returns: "undefined"
 
// Null
typeof Null;  // Returns: "object"
 
// Objects
typeof {name: "John", age: 18};  // Returns: "object"
 
// Arrays
typeof [1, 2, 4];  // Returns: "object"
 
// Functions
typeof function(){};  // Returns: "function"

正如你在上面的示例中可以清楚地看到,當我們 null 使用 typeof 運算子(第 22 行) 測試值時,它返回 object 而不是 null

這是 JavaScript 中的一個長期存在的錯誤,但由於網路上的大量程式碼圍繞此行為編寫,因而修復它會產生更多問題,因此修復此問題的想法被設計和維護 JavaScript 的委員會所拒絕。