## 常用数据类型
1. 常用的数据类型及其描述:
| 数据类型 | 描述 |
| ----------- | ----------------------------------------------------------------------------------------- |
| `undefined` | 表示变量未定义或未赋值的特殊值。 |
| `null` | 表示一个空值。 |
| `boolean` | 表示逻辑值,只有两个可能的值:`true`(真)和`false`(假)。 |
| `number` | 表示数值,可以是整数或浮点数,例如`42`或`3.14`。 |
| `string` | 表示文本字符串,例如`"Hello, world!"`。 |
| `symbol` | 在ECMAScript 6中引入的新类型,表示唯一的、不可变的值。每个`symbol`都是独一无二的。 |
| `object` | 表示复杂数据结构,可以包含多个键值对。对象可以是数组、函数、日期等等。 |
2. 特殊的内置对象类型:
| 数据类型 | 描述 |
| ------------- | ---------------------------------------------------------------------------------- |
| `Array` | 表示有序的集合,可以包含任意类型的数据。 |
| `Function` | 表示可执行的代码块,可以接受参数并返回值。 |
| `Date` | 表示日期和时间。 |
| `RegExp` | 表示正则表达式,用于匹配和操作字符串。 |
| `Map` | 表示键值对的集合,其中键和值可以是任意类型的数据。 |
| `Set` | 表示一组唯一值的集合,其中值可以是任意类型的数据。 |
| `Promise` | 表示一个异步操作的最终完成或失败的结果。 |
| `Error` | 表示在运行时发生的错误,可以捕获并处理。 |
| `Math` | 提供了一组数学相关的函数和常量。 |
| `JSON` | 提供了用于解析和序列化JSON数据的方法。 |
| `Math` | 提供了一组数学相关的函数和常量。 |
| `Math` | 提供了一组数学相关的函数和常量。 |
| `Math` | 提供了一组数学相关的函数和常量。 |
| `Math` | 提供了一组数学相关的函数和常量。 |
| `Math` | 提供了一组数学相关的函数和常量。 |
## 判断方法
1. 使用`typeof`操作符:`typeof`可以用于判断大多数基本数据类型(除了`null`和`object`)。
```javascript
typeof undefined; // "undefined"
typeof null; // "object"
typeof true; // "boolean"
typeof 42; // "number"
typeof "Hello"; // "string"
typeof Symbol(); // "symbol"
typeof {}; // "object"
```
2. 使用`instanceof`操作符:`instanceof`可以用于判断一个对象是否属于某个特定类型或类的实例。
```javascript
[] instanceof Array; // true
{} instanceof Object; // true
new Date() instanceof Date; // true
/regex/ instanceof RegExp; // true
```
3. 使用`Array.isArray()`函数:`Array.isArray()`用于检查一个值是否为数组类型。
```javascript
Array.isArray([]); // true
Array.isArray({}); // false
```
4. 使用`Object.prototype.toString.call()`方法:这种方法可以在所有的数据类型上使用,但需要注意传入的值必须是对象。
```javascript
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(42); // "[object Number]"
Object.prototype.toString.call("Hello"); // "[object String]"
Object.prototype.toString.call(Symbol()); // "[object Symbol]"
Object.prototype.toString.call({}); // "[object Object]"
```
## 类型转换
**隐式转换**:
隐式转换是在操作中自动发生的类型转换,不需要显式地指定转换操作。以下是一些常见的隐式转换情况:
1. 字符串和数字之间的隐式转换:
- 字符串转换为数字:发生在算术运算或比较操作中。
- 数字转换为字符串:发生在字符串拼接或某些上下文中,如`console.log()`输出。
2. 布尔值的隐式转换:
- 非零数字、非空字符串、非空数组等被视为`true`,`0`、`''`、`null`、`undefined`、`NaN`、`false`等被视为`false`。
3. 其他类型之间的隐式转换:
- 数字和布尔值之间的转换:`true`转换为`1`,`false`转换为`0`。
- 字符串和布尔值之间的转换:`true`转换为`'true'`,`false`转换为`'false'`。
**显式转换**:
1. 转换为字符串:
- 使用`String()`函数或`.toString()`方法。
- 示例:`String(42)`或`42.toString()`。
2. 转换为数字:
- 使用`Number()`函数、`parseInt()`函数或`parseFloat()`函数。
- 示例:`Number('42')`、`parseInt('42')`或`parseFloat('3.14')`。
3. 转换为布尔值:
- 使用`Boolean()`函数。
- 示例:`Boolean(0)`、`Boolean('')`。
4. 转换为数组:
- 使用`Array.from()`方法将类数组对象或可迭代对象转换为数组。
- 示例:`Array.from('hello')`。
## 创建方法
| 数据类型 | 创建方式 | 相关方法 |
| --------- | ------------------------------------------------------------ | ---------------------------------------------------------- |
| `undefined` | 通过未定义或未赋值的变量创建 | |
| `null` | 直接使用`null`关键字创建 | |
| `boolean` | 使用`true`或`false`关键字创建 | |
| `number` | 直接使用数字创建,可以是整数或浮点数 | `Number.parseInt()`、`Number.parseFloat()` |
| `string` | 使用单引号、双引号或反引号括起来的字符序列 | 字符串对象的方法,如`toUpperCase()`、`substring()` |
| `symbol` | 使用`Symbol()`函数创建唯一的符号 | |
| `object` | 使用对象字面量 `{}` 创建,或使用构造函数创建 | 对象的属性和方法,`Object`的方法,如`Object.keys()` |
| `Array` | 使用数组字面量 `[]` 或通过`Array`构造函数创建 | 数组对象的方法,如`push()`、`pop()`、`slice()` |
| `Function` | 使用函数声明或函数表达式创建 | 函数对象的方法,如`call()`、`apply()` |
| `Date` | 使用`new Date()`构造函数创建 | 日期对象的方法,如`getFullYear()`、`getMonth()` |
| `RegExp` | 使用正则表达式字面量 `/pattern/` 或通过`RegExp`构造函数创建 | 正则表达式对象的方法,如`test()`、`exec()` |
| `Map` | 使用`new Map()`构造函数创建 | `Map`对象的方法,如`set()`、`get()`、`has()` |
| `Set` | 使用`new Set()`构造函数创建 | `Set`对象的方法,如`add()`、`has()`、`delete()` |
| `Promise` | 使用`new Promise()`构造函数创建 | `then()`、`catch()`、`finally()` |
| `Error` | 使用`throw`关键字抛出错误 | 错误对象的属性和方法,如`message`属性和`stack`属性,`try-catch`块捕获和处理错误 |
版权声明:除特别声明外,本站所有文章皆是本站原创,转载请以超链接形式注明出处!