JavaScript 数据类型

摘要:在本教程中,您将学习有关 JavaScript 数据类型及其独特特征。

JavaScript 具有原始数据类型

  1. null
  2. undefined
  3. boolean
  4. number
  5. string
  6. symbol – 来自 ES2015
  7. bigint – 来自 ES2020

以及一个复杂数据类型 object

JavaScript data types

JavaScript 是一种动态类型的语言,这意味着一个 变量 不与特定类型相关联。换句话说,一个变量可以保存不同类型的值。例如

let counter = 120; // counter is a number
counter = false;   // counter is now a boolean
counter = "foo";   // counter is now a stringCode language: JavaScript (javascript)

要确定存储在变量中的值的当前类型,可以使用 typeof 运算符

let counter = 120;
console.log(typeof(counter)); // "number"

counter = false; 
console.log(typeof(counter)); // "boolean"

counter = "Hi";
console.log(typeof(counter)); // "string"Code language: JavaScript (javascript)

输出

"number"
"boolean"
"string"Code language: JSON / JSON with Comments (json)

undefined 类型

undefined 类型是一种原始类型,它只有一个值 undefined。默认情况下,当声明变量但未初始化时,它默认为 undefined

考虑以下示例

let counter;
console.log(counter);        // undefined
console.log(typeof counter); // undefinedCode language: JavaScript (javascript)

在本例中,counter 是一个变量。由于 counter 未初始化,因此它被分配了值 undefinedcounter 的类型也是 undefined

需要注意的是,当您对尚未声明的变量调用 typeof 运算符时,它也会返回 undefined

console.log(typeof undeclaredVar); // undefinedCode language: JavaScript (javascript)

null 类型

null 类型是第二个原始数据类型,它也只有一个值 null。例如

let obj = null;
console.log(typeof obj); // objectCode language: JavaScript (javascript)

typeof null 返回 object 是 JavaScript 中的一个已知错误。由于可能破坏许多现有网站,因此拒绝了修复该问题的提案。

JavaScript 定义 null 等于 undefined,如下所示

console.log(null == undefined); // trueCode language: JavaScript (javascript)

数字类型

JavaScript 使用 number 类型来表示整数和浮点数。

以下语句声明一个变量并用整数初始化其值

let num = 100;Code language: JavaScript (javascript)

要表示浮点数,您需要包含一个小数点,后跟至少一个数字。例如

let price = 12.5; 
let discount = 0.05;Code language: JavaScript (javascript)

请注意,如果数字看起来像一个整数,JavaScript 会自动将浮点数转换为整数。

原因是 Javascript 始终希望使用更少的内存,因为浮点值使用的内存是整数值的 2 倍。例如

let price = 200.00; // interpreted as an integer 200Code language: JavaScript (javascript)

要获取数字类型的范围,可以使用 Number.MIN_VALUENumber.MAX_VALUE。例如

console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
console.log(Number.MIN_VALUE); // 5e-324Code language: JavaScript (javascript)

此外,可以使用 Infinity-Infinity 来表示无穷大。例如

console.log(Number.MAX_VALUE + Number.MAX_VALUE); // Infinity
console.log(-Number.MAX_VALUE - Number.MAX_VALUE); // -InfinityCode language: JavaScript (javascript)

NaN

NaN 代表 Not a Number(非数字)。它是一个特殊数字值,表示无效的数字。例如,字符串除以数字返回 NaN:.

console.log('a'/2); // NaN;Code language: JavaScript (javascript)

NaN 具有两个特殊特征

  • NaN 的任何运算都会返回 NaN
  • NaN 不等于任何值,包括自身。

以下是一些示例

console.log(NaN/2); // NaN
console.log(NaN == NaN); // falseCode language: JavaScript (javascript)

字符串类型

在 JavaScript 中,字符串是零个或多个字符的序列。字符串文字以单引号 (') 或双引号 (") 开始和结束。

以双引号开始的字符串必须以双引号结束,以单引号开始的字符串也必须以单引号结束。例如

let greeting = 'Hi';
let message  = "Bye";Code language: JavaScript (javascript)

如果要在文字字符串中使用单引号或双引号,则需要使用反斜杠对其进行转义。例如

let message = 'I\'m also a valid string'; // use \ to escape the single quote (')Code language: JavaScript (javascript)

JavaScript 字符串是不可变的,这意味着它们在创建后无法修改。但是,您可以从现有字符串创建新字符串。例如

let str = 'JavaScript';
str = str + ' String';Code language: JavaScript (javascript)

在本例中

  • 首先,声明 str 变量并将其初始化为字符串 'JavaScript'
  • 其次,使用 + 运算符将 'JavaScript'' String' 组合,使其值变为 'Javascript String'

在幕后,JavaScript 引擎会创建一个新的字符串,其中包含新的字符串 'JavaScript String',并销毁原始字符串 'JavaScript'' String'

以下示例尝试修改字符串 JavaScript 的第一个字符

let s = 'JavaScript';
s[0] = 'j';
console.log(s)Code language: JavaScript (javascript)

输出结果为

'JavaScript'Code language: JavaScript (javascript)

但不是

'javaScript'Code language: JavaScript (javascript)

布尔类型

boolean 类型有两个文字值:truefalse(小写)。以下示例声明两个包含布尔值的变量。

let inProgress = true;
let completed = false;

console.log(typeof completed); // booleanCode language: JavaScript (javascript)

JavaScript 允许将其他类型的值转换为 truefalse 的布尔值。

要将其他类型的值转换为布尔值,可以使用 Boolean() 函数。

下表显示了转换规则

类型truefalse
string非空字符串空字符串
number非零数字和 Infinity0, NaN
对象非空对象null
undefined undefined

例如

console.log(Boolean('Hi'));// true
console.log(Boolean(''));  // false

console.log(Boolean(20));  // true
console.log(Boolean(Infinity));  // true
console.log(Boolean(0));  // false

console.log(Boolean({foo: 100}));  // true on non-empty object
console.log(Boolean(null));// falseCode language: JavaScript (javascript)

symbol 类型

JavaScript 在 ES6 中引入了一种新的原始类型:symbol。与其他原始类型不同,symbol 类型没有文字形式。

要创建符号,可以调用 Symbol 函数,如下所示

let s1 = Symbol();Code language: JavaScript (javascript)

每次调用 Symbol 函数时,它都会创建一个新的唯一值。

console.log(Symbol() == Symbol()); // falseCode language: JavaScript (javascript)

请注意,您将在 symbol 教程 中了解有关符号的更多信息。

bigint 类型

bigint 类型表示大于 253 - 1 的整数。要形成 bigint 文字数字,在数字末尾附加字母 n

let pageView = 9007199254740991n;
console.log(typeof(pageView)); // 'bigint'Code language: JavaScript (javascript)

您将在 此处 了解有关 bigint 类型的更多信息。

对象类型

在 JavaScript 中,对象属性 的集合,其中每个属性都定义为键值对。

以下示例使用对象文字语法定义一个空对象

let emptyObject = {};Code language: JavaScript (javascript)

以下示例定义了 person 对象,它具有两个属性:firstNamelastName

let person = {
    firstName: 'John',
    lastName: 'Doe'
};Code language: JavaScript (javascript)

对象的属性名称可以是任何字符串。如果属性名称不是有效的标识符,则可以在属性名称周围使用引号。

例如,如果 person 对象具有属性 first-name,则必须将其放在引号中,例如 "first-name"

对象的属性可以保存一个对象。例如

let contact = {
    firstName: 'John',
    lastName: 'Doe',
    email: '[email protected]',
    phone: '(408)-555-9999',
    address: {
        building: '4000',
        street: 'North 1st street',
        city: 'San Jose',
        state: 'CA',
        country: 'USA'
    }
}Code language: JavaScript (javascript)

contact 对象具有 firstNamelastNameemailphoneaddress 属性。

address 属性本身保存一个对象,该对象具有 buildingstreetcitystatecountry 属性。

要访问对象的属性,可以使用

  • 点符号 (.)
  • 数组式符号 ([])。

以下示例使用点符号 (.) 访问 contact 对象的 firstNamelastName 属性。

console.log(contact.firstName);
console.log(contact.lastName);Code language: CSS (css)

如果引用不存在的属性,您将获得 undefined 值。例如

console.log(contact.age); // undefinedCode language: JavaScript (javascript)

以下示例使用数组式符号访问 contact 对象的 emailphone 属性。

console.log(contact['phone']); // '(408)-555-9999'
console.log(contact['email']); // '[email protected]'Code language: JavaScript (javascript)

总结

  • JavaScript 具有原始类型:numberstringbooleannullundefinedsymbolbigint 以及一个复杂类型:object
本教程对您有帮助吗?