JavaScript手写代码秘籍:从new操作符到JSON.stringify实现

0 下载量 15 浏览量 更新于2024-08-31 收藏 124KB PDF 举报
本文主要探讨了JavaScript中两个关键的面试知识点——如何实现`new`操作符和`JSON.stringify`函数。对于中高级前端开发者来说,理解并能够手动实现这些核心功能是至关重要的。 1. 实现`new`操作符 在JavaScript中,`new`操作符用于创建和初始化一个新的对象。以下是一个简单的实现: ```javascript function New(func) { var res = {}; if (func.prototype !== null) { res.__proto__ = func.prototype; } var ret = func.apply(res, Array.prototype.slice.call(arguments, 1)); if ((typeof ret === "object" || typeof ret === "function") && ret !== null) { return ret; } return res; } var obj = New(A, 1, 2); // 等同于 var obj = new A(1, 2); ``` 这个实现创建了一个新的对象`res`,并将其`__proto__`链接到构造函数`func`的原型。然后,它通过`apply`调用构造函数,并将`arguments`对象的剩余参数传递给它。如果构造函数返回了一个对象,那么就返回那个对象;否则,返回新创建的`res`对象。 2. 实现`JSON.stringify` `JSON.stringify()`方法用于将JavaScript值转换为JSON字符串。下面是一个基本的实现: ```javascript function jsonStringify(obj) { let type = typeof obj; if (type !== "object") { if (/string|undefined|function/.test(type)) { obj = '"' + obj + '"'; } return obj; // 这里省略了其他类型的处理,例如Number, Boolean等 } // 对象的完整实现会更复杂,包括处理循环引用、函数、undefined、symbol等 } ``` 这个简化的实现只处理了非对象类型,当对象类型时,实际的`JSON.stringify`会处理更多细节,如处理`undefined`、函数、symbol、循环引用,以及不可枚举属性等。完整实现`JSON.stringify`需要考虑这些情况,并按照JSON规范进行适当的转换或过滤。 在中高级前端面试中,对`new`操作符和`JSON.stringify`的深入理解不仅表明了你对JavaScript基础的牢固掌握,还能体现你对语言机制的洞察力。熟悉这些底层机制对于优化代码、解决复杂问题和调试至关重要。