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 的委员会所拒绝。