`JSON.stringify()` 是 JavaScript 中的一个方法,用于将一个 JavaScript 对象或值转换为 JSON 字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和写入,同时也易于机器解析和生成。
以下是 `JSON.stringify()` 的基本用法和一些常见选项:
### 基本用法
```javascript
const obj = { name: 'John', age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // 输出:'{"name":"John","age":30}'
```
### 常见选项
1. ** replacer 参数**:这是一个函数或数组,用于过滤或替换要序列化的值。如果它是一个函数,那么在序列化过程中会被调用,并且可以为每个成员定制字符串表示形式。如果它是一个数组,那么只有数组中的值会被序列化。如果省略此参数,则默认序列化全部属性。
```javascript
const obj = { name: 'John', age: 30 };
const replacer = function(key, value) {
if (typeof value === 'string') {
return undefined; // 不序列化字符串值
}
return value;
}
const jsonString = JSON.stringify(obj, replacer); // 只序列化非字符串的值
```
2. **space 参数**:此参数用于美化输出 JSON 字符串。可以传入一个数字或字符串来指定输出的间距和换行符。数字表示每个级别的缩进量,字符串用于指定缩进字符。如果不提供或为 null,则输出紧凑格式(没有空格或缩进)。
```javascript
const obj = { name: 'John', age: 30 };
const jsonStringPretty = JSON.stringify(obj, null, 2); // 使用两个空格进行缩进
```
### 注意点
* 如果对象包含循环引用,`JSON.stringify()` 会抛出错误。这意味着对象直接或间接引用自身会导致无限递归,从而无法生成有效的 JSON 字符串。
* 如果对象包含某些不可序列化的值(如 `undefined`、`Symbol`、`Function` 等),这些值将被忽略或转换为其他格式。例如,`undefined` 会被忽略,而 `Symbol` 会被转换为字符串表示形式。