2020-07-05 03:55:28
原生JavaScript中目前被认为“较没用”的功能与API主要包括以下几种,它们或因可读性差、性能问题,或因被更现代的替代方案取代而逐渐被边缘化:

with 语句
作用:曾用于扩展对象的作用域链,简化对象属性的访问(如 with(obj){ x = 1; } 等价于 obj.x = 1;)。
无用原因:
代码可读性差:改变作用域链导致变量来源模糊,增加维护成本。
潜在性能问题:引擎需额外解析变量来源,可能影响执行效率。
权威不推荐:MDN明确指出其“有害且应避免使用”。
void 操作符
作用:计算表达式并返回 undefined(如 <a href="javascript:void(0)"> 阻止页面跳转)。
无用原因:
功能冗余:直接使用 undefined 或箭头函数(如 () => {})更直观。
可读性差:void 0 等写法不直观,易引发误解。
有限使用场景:仅少数边缘情况(如避免单行箭头函数隐式返回)需使用。
eval 函数
作用:动态执行字符串中的JavaScript代码(如 eval("alert(1)"))。
无用原因:
安全风险:执行不可信代码可能导致XSS攻击或代码注入。
性能低下:字符串解析和动态编译比直接执行代码慢。
替代方案丰富:如 Function 构造函数、JSON.parse() 等更安全。
escape 和 unescape 函数
作用:对字符串进行URL编码/解码(如 escape("hello world") 返回 "hello%20world")。
无用原因:
功能被取代:encodeURIComponent 和 decodeURIComponent 支持更全面的字符编码(如中文、特殊符号)。
编码规则不一致:escape 不编码 @*_+./ 等字符,可能导致兼容性问题。
arguments 对象
作用:在ES6前用于访问函数所有参数(如 function foo() { console.log(arguments[0]); })。
无用原因:
非真正数组:需通过 Array.prototype.slice.call(arguments) 转换后才能使用数组方法。
剩余参数语法替代:ES6的 ...rest 参数(如 function foo(...args) { console.log(args); })更简洁直观。
总结:这些API的“无用性”源于技术演进带来的更优解决方案。现代开发中,应优先使用剩余参数、encodeURIComponent、严格模式(禁用 with 和 eval)等特性,以提升代码的安全性、可读性和性能。