目录
parse 方法:querystring.parse 方法用于将一个查询字符串解析为一个对象。例如:
stringify 方法:querystring.stringify 方法用于将一个对象格式化为一个查询字符串。例如:
目录
parse 方法:querystring.parse 方法用于将一个查询字符串解析为一个对象。例如:
stringify 方法:querystring.stringify 方法用于将一个对象格式化为一个查询字符串。例如:
querystring 模块
在 Node.js 中,querystring 模块主要用于解析和格式化 URL 查询字符串。
-
引入模块:要使用 querystring 模块,首先需要通过
require
方法将其引入:
const querystring = require('querystring'); |
-
parse 方法:
querystring.parse
方法用于将一个查询字符串解析为一个对象。例如:
const queryString = 'name=John+Doe&age=30&country=US';
const parsedQuery = querystring.parse(queryString);
console.log(parsedQuery);
// 输出: { name: 'John Doe', age: '30', country: 'US' }
这个方法接受以下参数:
str
(必需):需要解析的查询字符串。separator
(可选):用于分割查询字符串的字符或字符串,默认值为'&'
。eq
(可选):用于划分键和值的字符或字符串,默认值为'='
。options
(可选):一个对象,可以设置maxKeys
和decodeURIComponent
这两个属性。maxKeys
用于限制解析的键的最大数量,decodeURIComponent
用于自定义解码函数。
-
stringify 方法:
querystring.stringify
方法用于将一个对象格式化为一个查询字符串。例如:
const queryParams = { name: 'John Doe', age: 30, country: 'US' };
const queryString = querystring.stringify(queryParams);
console.log(queryString);
// 输出: 'name=John%20Doe&age=30&country=US'
这个方法接受以下参数:
obj
(必需):需要格式化的对象。separator
(可选):用于分割查询字符串的字符或字符串,默认值为'&'
。eq
(可选):用于划分键和值的字符或字符串,默认值为'='
。encodeURIComponent
(可选):用于自定义编码函数。
-
escape 和 unescape 方法:在早期的 Node.js 版本中,querystring 模块提供了
escape
和unescape
方法用于编码和解码 URL 查询字符串中的特殊字符。然而,从 Node.js v7.0.0 开始,这两个方法已被弃用,推荐使用encodeURIComponent
和decodeURIComponent
替代。
了解这些关于 querystring 模块的基本知识,可以帮助你在 Node.js 中更好地处理和操作 URL 查询字符串。
JavaScript对象和数组
在JavaScript中,对象和数组是两种非常重要的数据结构。它们都可以存储多个值,但它们在存储和访问数据的方式上有所不同。
对象(Object):
对象是一种数据结构,它包含一系列的键值对。每个键都是一个字符串,每个值可以是任何JavaScript的数据类型,包括另一个对象或数组。
例如:
let person = { | |
name: "John", | |
age: 30, | |
hobbies: ["reading", "gaming", "cooking"] | |
}; |
在这个例子中,person
是一个对象,它有三个属性:name
、age
和 hobbies
。name
和 age
的值是字符串和数字,而 hobbies
的值是一个数组。
你可以使用点符号(.
)或者方括号([]
)语法来访问对象的属性。例如:person.name
或 person["age"]
。
数组(Array):
数组是一种特殊的对象,它用于存储有序的元素集合。这些元素可以是任何JavaScript的数据类型,包括另一个对象或数组。
例如:
let fruits = ["apple", "banana", "cherry"]; |
在这个例子中,fruits
是一个数组,它包含三个元素:"apple"
、"banana"
和 "cherry"
。
你可以使用索引(从0开始)来访问数组的元素。例如:fruits[0]
将返回 "apple"
。
对象和数组的不同点:
- 键的类型:对象的键是字符串,而数组的键是整数(即索引)。
- 数据的存储方式:对象存储的是键值对,而数组存储的是有序的元素集合。
- 访问方式:对象通过键来访问属性,而数组通过索引来访问元素。
- 方法:对象和数组都有一些内置的方法,但是它们的方法是不同的。例如,数组有
push
、pop
、shift
、unshift
等方法用于添加和删除元素,而对象没有这些方法。 - 迭代:你可以使用
for...in
循环来迭代对象的属性,或者使用Object.keys()
方法来获取对象的所有键。而数组则可以使用多种迭代方法,如for
、for...of
、forEach
等。 - 扩展性:对象可以随时添加新的属性,而数组的长度是固定的,虽然你可以通过添加新元素来改变它的大小。
- 数组调用【0】 对象调用 对象名.对象属性
startsWith
-
函数用法:
str.startsWith(prefix[, start[, end]])
prefix
(必需):你想要检查的字符串的前缀。start
(可选):开始搜索的位置,默认值为 0。end
(可选):结束搜索的位置,默认值为字符串的长度。
-
返回值:如果字符串以指定的前缀开始,则返回
true
,否则返回false
。 -
区分大小写:
startsWith
函数是区分大小写的,这意味着 "Hello" 和 "hello" 被视为不同的字符串。 -
与indexOf的区别:虽然你可以使用
indexOf
函数来检查一个字符串是否包含特定的子串,但startsWith
函数更简洁、更直观。此外,startsWith
还提供了start
和end
参数,可以更灵活地指定搜索的范围。 -
兼容性:
startsWith
函数在 ECMAScript 2015(ES6)中被引入,因此在较旧的浏览器或 Node.js 版本中可能不支持。确保在使用前检查目标环境的兼容性。 -
使用示例:
const str = 'Hello, world!'; | |
console.log(str.startsWith('Hello')); // 输出: true | |
console.log(str.startsWith('world')); // 输出: false | |
console.log(str.startsWith('o', 4)); // 输出: true | |
console.log(str.startsWith('o', 4, 7)); // 输出: false |
了解这些关于 startsWith
函数的基本知识,可以帮助你在 Node.js 中更有效地处理字符串。
split函数
const str2 = 'Hello, world!';
const words = str2.split(' ', 1);
const words2 = str2.split(' ')[1]; //调用数组
console.log(words); // 输出: ['Hello']
console.log(words2);// 输出: world!
//words2 = str2.split(' ')[0];输出 ['Hello']
json
在JavaScript中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它本身是一种字符串表示法,用于表示结构化数据。JSON不是JavaScript的一个内置对象或类,而是一种约定俗成的数据格式。
然而,在JavaScript中处理JSON数据时,通常会使用JSON
对象。JSON
对象提供了两个主要的方法:stringify
和parse
。
-
JSON.stringify():
- 功能:将JavaScript对象或值转换为JSON字符串。
- 语法:
JSON.stringify(value[, replacer[, space]])
value
:必需,要转换的JavaScript对象或值。replacer
:可选,用于过滤或替换被字符串化的属性的函数或数组。space
:可选,用于插入缩进和空格以美化输出的数字或字符串。
-
JSON.parse():
- 功能:将一个JSON字符串解析为JavaScript对象。
- 语法:
JSON.parse(text[, reviver])
text
:必需,要解析的JSON字符串。reviver
:可选,一个函数,用于在解析过程中处理生成的每个属性。
以下是一个简单的示例,展示了如何在JavaScript中使用JSON.stringify
和JSON.parse
方法:
javascript复制代码
// 创建一个JavaScript对象 | |
const person = { | |
name: 'John Doe', | |
age: 30, | |
occupation: 'Engineer' | |
}; | |
// 将JavaScript对象转换为JSON字符串 | |
const jsonString = JSON.stringify(person); | |
console.log(jsonString); // 输出: '{"name":"John Doe","age":30,"occupation":"Engineer"}' | |
// 将JSON字符串解析为JavaScript对象 | |
const parsedPerson = JSON.parse(jsonString); | |
console.log(parsedPerson); // 输出: { name: 'John Doe', age: 30, occupation: 'Engineer' } |
需要注意的是,虽然JSON和JavaScript的对象字面量看起来很像,但它们之间有一些差异。例如,JSON不支持JavaScript中的函数、日期对象、undefined值等。在将JavaScript对象转换为JSON字符串时,这些值会被忽略或转换为相应的基本类型。
易错
传参数山东和山东省要区分 山东省和"山东省"
if(假)是不执行该代码的,所以要if(!假)假的时候执行这个代码!!!!!!
在你提供的代码中,!cityList
的作用是检查 cityList
是否为 undefined
、null
、false
、0
、NaN
或空字符串等“假值”。如果 cityList
是这些值之一,则 !cityList
的结果为 true
。
fs.readFile异步问题
在JavaScript中,大部分代码确实是按照从上到下的顺序执行的。然而,有一些特定的函数,比如fs.readFile
,是异步的。这意味着它们在执行时会立即返回,而不会等待函数内部的操作完成。这是因为这些函数通常需要执行一些可能需要很长时间的操作,比如读取文件或者从数据库获取数据。如果JavaScript等待这些操作完成,那么它将无法处理其他的请求或操作,这将极大地降低其性能。
因此,当你调用fs.readFile
时,它会立即返回,然后JavaScript会继续执行后面的代码。当文件读取完成时,fs.readFile
的回调函数会被调用,此时htmlStr
才被定义。但是,因为你将res.setHeader
和res.end(htmlStr)
放在了fs.readFile
的外面,所以它们在htmlStr
被定义之前就已经被执行了。
为了解决这个问题,你需要将res.setHeader
和res.end(htmlStr)
放入fs.readFile
的回调函数中,这样它们将在文件读取完成后被执行。