大叔爱吃猕猴桃 escape、encodeURI 和 encodeURIComponent 都是 JavaScript 中用于编码 URI 组件的函数,但它们的用途和处理方式有所不同。以下是对这三者的详细解释和区别: 1. escape 描述:escape 是一个过时的函数,用于对字符串进行 URL 编码。它将非 ASCII 字符和一些特殊字符转换为百分号编码(%xx)格式。 语法:escape(string) 用途:在现代 Web 开发中,escape 已不推荐使用,因为它不能正确处理所有字符,并且对非 ASCII 字符和一些保留字符(如 +, /)的编码不完全准确。 示例: console.log(escape('Hello World!')); // 输出: Hello%20World%21 2. encodeURI 描述:encodeURI 用于对整个 URI 进行编码,但保留 URI 中的特殊字符,如冒号、斜杠、问号和井号,这些字符在 URI 中有特定含义。 语法:encodeURI(uri) 用途:当你需要编码一个完整的 URI 时(例如,URL 中的查询参数),使用 encodeURI 是合适的,它会对 URI 中的非字母数字字符进行编码,但不会编码那些在 URI 中有特殊意义的字符。 示例: console.log(encodeURI('https://example.com/search?q=hello world')); // 输出: https://example.com/search?q=hello%20world 3. encodeURIComponent 描述:encodeURIComponent 用于对 URI 组件(例如,查询字符串中的参数)进行编码。它会编码所有非字母数字字符,包括那些在 URI 中有特殊意义的字符。 语法:encodeURIComponent(component) 用途:当你需要编码 URI 的一部分,例如查询参数的值,使用 encodeURIComponent 是合适的。它会将所有非字母数字字符(包括 &, =, ?, # 等)都进行编码。 示例: console.log(encodeURIComponent('hello world&foo=bar')); // 输出: hello%20world%26foo%3Dbar