Logo
Section 1 / 14

JavaScript 基础

让我们来学习JavaScript数据类型的基础知识。

导入

JavaScript 基础

让我们来学习JavaScript数据类型的基础知识。

数据类型

JavaScript 有三种原始数据类型——string、number 和 boolean。还有五种引用数据类型——Object、Array、Function、Date 和 RegExp。数组、函数、日期和正则表达式都是特殊类型的对象,但从概念上讲,日期和正则表达式被视为原始数据值,只是以包装对象的形式实现。

以下是 JavaScript 数据类型的示例:

1let string = "Johnson"; // 字符串 2let number = 16; // 数字 3let bool = true; // 布尔值 4 5let object = {firstName:"John", lastName:"Doe"}; // 对象 6let array = ['Jim', 'Shawna']; // 数组 7function func() { return (5 * 19); } // 函数 8let date = new Date(); // 日期 9 10console.log("字符串是: " + string); 11console.log("数字是: " + number); 12console.log("对象是: " + object.firstName + " " + object.lastName); 13console.log("数组是: " + array); 14console.log("函数是: " + func()); 15console.log("日期是: " + date.toUTCString());

字符串数据

字符串是一系列 Unicode 字符。字符串字面量,如 "Hello world!"、'A3F0' 或空字符串 "",用单引号或双引号括起来。两个字符串表达式可以通过 + 操作符连接,并使用三重等号操作符进行相等性比较。

通过在字符串上应用 length 属性,可以获取字符串的字符数量。以下示例有助于理解 length 属性的使用:

1let firstName = "James"; 2let lastName = "Bond"; 3if (firstName + lastName === "JamesBond") { 4 console.log("名字长度为: ", firstName.length); 5} else { 6 console.log("失败"); 7}

数值数据

所有数值数据都以 64 位浮点格式表示,可选地包含指数(例如 3.1e10)。JavaScript 中没有显式的整数与浮点数类型区分。如果一个数值表达式无法计算为有效数字,则其值被设为 NaN(非数字),可通过内置函数 isNaN(expr) 进行检测。

1// 检查 NaN 2function milliseconds(x) { 3 if (isNaN(x)) { 4 return '不是数字!'; 5 } 6 return x * 1000; 7} 8 9console.log(milliseconds('100F')); 10console.log(milliseconds('0.0314E+2'));

内置函数 Number.isInteger 可用于判断一个数是否为整数。若要确保某个数值是整数,或把表示数字的字符串转换为整数,应使用内置函数 parseInt。

类似地,表示小数的字符串可以用 parseFloat 转换为数字。将数字 n 转换为字符串的最佳方法是使用 toString(n)。

1// 检查是否为整数 2function check(x, y) { 3 if (Number.isInteger(y / x)) { 4 return '整数!'; 5 } 6 return '不是整数!'; 7} 8 9console.log(check(5, 10)); 10console.log(check(5, 11)); 11 12let a = parseInt(10.00); // 将浮点数解析为整数 13let b = parseFloat('10'); // 将字符串解析为浮点数 14let c = (15).toString(); // 将数字转换为字符串 15 16console.log("a 的类型是: " + typeof a); 17console.log("b 的类型是: " + typeof b); 18console.log("c 的类型是: " + typeof c);

布尔数据

有两个预定义的布尔数据字面量:true 和 false。布尔运算符符号包括:

  • ! 表示逻辑非(NOT),
  • && 表示逻辑与(AND),
  • || 表示逻辑或(OR)。

当非布尔值用于条件判断或作为布尔表达式的操作数时,会根据以下规则隐式转换为布尔值:

  • 空字符串、数值字面量 0、undefined 和 null 都映射为 false。
  • 所有其他值都映射为 true。

这种转换也可以通过双否定操作显式完成,例如在等价性测试 !!undefined === false 中,该测试结果为 true。

1function check() { 2 if (!!undefined === false) { 3 return 'true!'; 4 } 5 return 'false!'; 6} 7 8console.log(check());

日期和时间

除了字符串、数字和布尔值外,日历日期和时间也是重要的原始数据类型。它们并非作为原始值实现,而是以 Date 类型的包装对象形式存在。

需要注意的是,Date 对象实际上并不直接表示日期,而是内部以自 1970 年 1 月 1 日 UTC 起的毫秒数来表示具体的时间点。

为了将 Date 对象的内部值转换为人类可读的字符串,有多种方式。最重要的两种方式是:

  • 使用 ISO 格式的日期时间字符串(如 2015-01-27);
  • 使用本地化格式的日期时间字符串(如 "27.1.2015",为简化起见,示例中省略了时间部分)。

当变量 x 是 Date 实例时(即 x instanceof Date),x.toISOString() 返回 ISO 格式的日期时间字符串,而 x.toLocaleDateString() 返回本地化格式的日期字符串。对于任意日期字符串 ds(无论是 ISO 格式还是本地化格式),new Date(ds) 都能创建对应的日期对象。

1let date = new Date(); // 日期 2 3console.log("日期是: " + date); 4console.log("日期是: " + date.toISOString()); 5console.log("日期是: " + date.toLocaleDateString()); 6console.log("日期是: " + date.toUTCString());

typeof 操作符

我们可以使用 typeof 操作符来检测变量 v 是否持有特定类型的值。例如,使用 typeof v === "number" 可以检查 v 是否为 number 类型。JavaScript 中变量、数组元素、函数参数和返回值的类型并未显式声明,通常也不会由 JS 引擎进行类型检查。类型转换(强制类型转换)会自动进行。

变量的值可能为以下几种情况之一:

  • 一种数据值,即字符串、数字或布尔值;
  • 一个对象引用,指向普通对象、数组、函数、日期或正则表达式;
  • 特殊数据值 null,通常用于初始化对象变量;
  • 特殊数据值 undefined,是所有已声明但未初始化变量的隐式初始值。

以下示例帮助我们理解 typeof 操作符:

1// "string" 2let a = "JavaScript"; 3// "number" 4let num = 25; 5// "undefined" 6let variable; 7// "object" 8let object = { firstName: "John", lastName: "Doe" }; 9 10console.log(typeof a); 11console.log(typeof num); 12console.log(typeof variable); 13console.log(typeof object);

类型转换

我们可以通过以下方式在不同数据类型之间进行显式转换:

类型转换

类型转换为字符串字符串转换为类型
布尔值String(x)Boolean(y)
数字(浮点数)String(x)parseFloat(y)
整数String(x)parseInt(y)
对象x.toString() 或 JSON.stringify(x)JSON.parse(y)
数组x.toString() 或 JSON.stringify(x)y.split() 或 JSON.parse(y)
函数x.toString()new Function(y)
日期x.toISOString()new Date(y)
正则表达式x.toString()new RegExp(y)

Web应用的基础

数据类型测试