JSON (即 JavaScript Object Notation) 是一种轻量级的数据格式,用于在 Web 应用的前端和后端之间交换数据。要精通 JSON 并在面试中脱颖而出,复习这些重要概念是非常关键的。
在这里,我们将涵盖从基础到高级的所有重要问题。
1. 什么是 JSON?
JSON 是 JavaScript Object Notation(JavaScript 对象表示法)的缩写。它具有以下特点:
- 一种基于文本的数据格式,用于表示结构化的数据。
- 轻量级,且易于读写。
- 独立于语言,但深受 JavaScript 语法的法影响。
2. JSON 支持哪些基本数据类型?
JSON 支持:
- String (字符串): "Amit"
- Number (数字): 25 (包括整数和浮点数)
- Boolean (布尔值): true, false
- Array (数组): ["item1", "item2"]
- Object (对象): {"key": "value"}
- Null (空值): null
3. 请解释 JSON 的结构和格式。
JSON 格式遵循 JavaScript 对象 的结构。它包含以字符串形式存在的键值对,可以在服务器和 Web 应用之间相互传输。存储在 JSON 中的值可以像检索 JavaScript 对象 的值那样被检索出来。
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
4. 谁创造了 JSON?
Douglas Crockford 是第一位介绍并创建 JSON 格式的人,这最早是在 2000 年。
5. JSON 文件的扩展名是什么?
JSON 文件可以使用 .json 扩展名来创建和存储。你可以通过字符串形式的键值对以 JSON 格式添加数据。
6. JSON 数据是如何从后端传输到前端的?
数据通过 JSON.Stringify 转换为 JSON 字符串的形式,并通过 HTTP 从后端发送到前端。
"{\"name\": \"Mohit\", \"age\": 30}"
前端使用 JSON.Parse 解析 JSON 字符串,将其作为 JavaScript 对象使用。
const obj = {"name": "Mohit", "age" : 30}
let personName = obj.name;
let personAge = obj.age;
7. JSON 有哪些特性?
JSON 具有如下不同的特性:
- 它是一种轻量级格式,有助于优化 Web 应用的性能。
- 它独立于不同的编程语言。
- 它获得了各种编程语言的广泛支持。
- JSON 格式非常易于理解。
- 它可以表示复杂的数据结构。
8. JSON 与 JavaScript 对象有何不同?
JSON
—
基于文本,规则严格(双引号,无尾随逗号)。
数据交换格式。
需要通过 JSON.parse 进行解析。
9. 如何将 JSON 转换为 JavaScript 对象?
我们可以使用 JSON.parse()
JavaScript
CODEBLOCK_d7c6d7bc
输出 (Output)
Mohit
10. 如何将 JavaScript 对象转换为 JSON?
使用 JSON.stringify() 将 JavaScript 对象转换为 JSON。
JavaScript
CODEBLOCK_8a8808cf
输出 (Output)
{"name":"Mohit","age":30}
11. JSON.stringify 参数的作用是什么?
JSON.stringify(value, replacer, space):
- value: 要序列化的对象。
- replacer: 用于过滤键的函数或数组。
- space: 添加缩进以提高可读性。
JavaScript
CODEBLOCK_4ce2f358
输出 (Output)
{
"name": "Mohit",
"age": 30,
"city": "Delhi"
}
12. JSON 可以包含函数吗?
不可以。JSON 不支持函数或 undefined 值。
JavaScript
CODEBLOCK_9c169b9d
输出 (Output)
{"name":"Mohit"}
13. 如何使用 JSON.stringify() 处理循环引用?
循环引用会导致错误。我们可以使用自定义的 replacer 函数:
JavaScript
CODEBLOCK_45d18012
输出 (Output)
{}
14. 如何使用 JSON 克隆一个对象?
我们可以利用 JSON.parse() 和 JSON.stringify() 的组合来创建对象的深拷贝。首先将对象转换为 JSON 字符串,然后再将其解析回新的对象。
JavaScript
CODEBLOCK_74c81eca
输出 (Output)
{ name: ‘Mohit‘, age: 30 }
注意:这种方法要求对象中的值都是可序列化的(例如,不能包含函数或 undefined)。