JavaScript全局函数:URI编码与类型转换详解
本文深入解析JavaScript中的全局函数,重点对比uri编码函数的差异,并详解eval执行机制及isnan、number等类型转换工具的用法,为前端开发提供准确的函数参考。
URI编码与解码函数
第1步:理解encodeURI与encodeURIComponent的区别
encodeURI()用于对整个URI进行编码,保留协议、主机名和路径分隔符(如:、/、?、#)。若需对URI中的特定组件(如查询参数或哈希值)进行编码,应使用encodeURIComponent()。后者会转义所有非字母数字字符,包括常规URI中的标点符号,确保组件间的分隔符不被错误编码。
示例:
// 整个URI编码,保留?和#
const uri = "https://www.example.com/search?q=hello world";
console.log(encodeURI(uri)); // https://www.example.com/search?q=hello%20world
// 仅对组件编码,转义?
console.log(encodeURIComponent("q=hello world")); // q%3Dhello%20world
第2步:使用decode系列函数还原编码
对应的解码函数为decodeURI()和decodeURIComponent()。它们分别对应上述两个编码函数。注意:切勿混用编码与解码函数,例如使用decodeURI()解码由encodeURIComponent()产生的数据会导致错误。
第3步:弃用的escape/unescape函数
escape()和unescape()属于早期标准,已自ECMAScript v3起被标记为废弃。现代开发中推荐使用encodeURI()和encodeURIComponent()替代。escape()仅针对ASCII码小于256的字符进行编码,不处理中文等多字节字符时的Unicode兼容性,因此不建议在新项目中使用。
代码执行与数值判断函数
第4步:谨慎使用eval进行动态代码执行
eval(string)接收一个字符串参数,将其作为JavaScript代码执行。虽然灵活,但存在严重的安全风险(如注入攻击)且性能较差。
示例:
let result = eval("10 + 20");
console.log(result); // 输出 30
// 注意:如果传入非字符串,将原样返回该对象
console.log(eval(123)); // 输出 123
安全提示:尽量避免直接使用eval。如需解析JSON数据,请使用标准的JSON.parse()方法。
第5步:判断数值状态isNaN与isFinite
isNaN(value):检查参数是否为“非数字”(NaN)。它会自动尝试将参数转换为数字再进行判断。如果转换失败或结果为NaN,则返回true。isFinite(value):检查参数是否为有限数。如果是NaN、正无穷(Infinity)或负无穷(-Infinity),则返回false。通常用于验证输入是否为有效数字。
示例:
console.log(isNaN("易水寒")); // true,无法转换为数字
console.log(isNaN("123")); // false,可转换为123
console.log(isFinite(100)); // true
console.log(isFinite(免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









