摘要:在本教程中,您将学习有关 JavaScript 数据类型及其独特特征。
JavaScript 具有原始数据类型
以及一个复杂数据类型 object。
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 未初始化,因此它被分配了值 undefined。counter 的类型也是 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_VALUE 和 Number.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 类型有两个文字值:true 和 false(小写)。以下示例声明两个包含布尔值的变量。
let inProgress = true;
let completed = false;
console.log(typeof completed); // booleanCode 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));// 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 对象,它具有两个属性: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); // undefinedCode 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。