摘要:在本教程中,您将学习有关 JavaScript 数据类型及其独特特征。
JavaScript 具有原始数据类型
以及一个复杂数据类型 object
。
JavaScript 是一种动态类型的语言,这意味着一个 变量 不与特定类型相关联。换句话说,一个变量可以保存不同类型的值。例如
let counter = 120; // counter is a number
counter = false; // counter is now a boolean
counter = "foo"; // counter is now a string
Code 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); // undefined
Code language: JavaScript (javascript)
在本例中,counter
是一个变量。由于 counter
未初始化,因此它被分配了值 undefined
。counter
的类型也是 undefined
。
需要注意的是,当您对尚未声明的变量调用 typeof
运算符时,它也会返回 undefined
console.log(typeof undeclaredVar); // undefined
Code language: JavaScript (javascript)
null 类型
null
类型是第二个原始数据类型,它也只有一个值 null
。例如
let obj = null;
console.log(typeof obj); // object
Code language: JavaScript (javascript)
typeof null
返回 object
是 JavaScript 中的一个已知错误。由于可能破坏许多现有网站,因此拒绝了修复该问题的提案。
JavaScript 定义 null
等于 undefined
,如下所示
console.log(null == undefined); // true
Code 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 200
Code language: JavaScript (javascript)
要获取数字类型的范围,可以使用 Number.MIN_VALUE
和 Number.MAX_VALUE
。例如
console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
console.log(Number.MIN_VALUE); // 5e-324
Code language: JavaScript (javascript)
此外,可以使用 Infinity
和 -Infinity
来表示无穷大。例如
console.log(Number.MAX_VALUE + Number.MAX_VALUE); // Infinity
console.log(-Number.MAX_VALUE - Number.MAX_VALUE); // -Infinity
Code 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); // false
Code 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
类型有两个文字值:true
和 false
(小写)。以下示例声明两个包含布尔值的变量。
let inProgress = true;
let completed = false;
console.log(typeof completed); // boolean
Code language: JavaScript (javascript)
JavaScript 允许将其他类型的值转换为 true
或 false
的布尔值。
要将其他类型的值转换为布尔值,可以使用 Boolean()
函数。
下表显示了转换规则
类型 | true | false |
---|---|---|
string | 非空字符串 | 空字符串 |
number | 非零数字和 Infinity | 0, 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));// false
Code language: JavaScript (javascript)
symbol 类型
JavaScript 在 ES6 中引入了一种新的原始类型:symbol
。与其他原始类型不同,symbol
类型没有文字形式。
要创建符号,可以调用 Symbol
函数,如下所示
let s1 = Symbol();
Code language: JavaScript (javascript)
每次调用 Symbol
函数时,它都会创建一个新的唯一值。
console.log(Symbol() == Symbol()); // false
Code 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
对象,它具有两个属性:firstName
和 lastName
。
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
对象具有 firstName
、lastName
、email
、phone
和 address
属性。
address
属性本身保存一个对象,该对象具有 building
、street
、city
、state
和 country
属性。
要访问对象的属性,可以使用
- 点符号 (
.
) - 数组式符号 (
[]
)。
以下示例使用点符号 (.
) 访问 contact
对象的 firstName
和 lastName
属性。
console.log(contact.firstName);
console.log(contact.lastName);
Code language: CSS (css)
如果引用不存在的属性,您将获得 undefined
值。例如
console.log(contact.age); // undefined
Code language: JavaScript (javascript)
以下示例使用数组式符号访问 contact
对象的 email
和 phone
属性。
console.log(contact['phone']); // '(408)-555-9999'
console.log(contact['email']); // '[email protected]'
Code language: JavaScript (javascript)
总结
- JavaScript 具有原始类型:
number
、string
、boolean
、null
、undefined
、symbol
和bigint
以及一个复杂类型:object
。