带你读《现代Javascript高级教程》四、JavaScript数组(1)https://developer.aliyun.com/article/1349685?groupCode=tech_library
3. 数组属性
JavaScript数组还有一些常用的属性,用于描述和操作数组的特性和状态。
- length:返回数组的长度。
- constructor:返回创建数组对象的原型函数。
- prototype:数组对象的原型对象,用于添加新的方法和属性。
这些属性可以帮助我们了解数组的结构和信息,以便更好地处理和操作数组。
4. 实现数组API
为了更好地理解数组的方法和实现原理,我们可以尝试自己模拟实现一些数组API的方法。以下是一些常用的数组方法的简单模拟实现示例:
实现添加和删除元素的方法
// 模拟实现 push() 方法Array.prototype.myPush = function(...elements) { const len = this.length; let i = 0; while (i < elements.length) { this[len + i] = elements[i]; i++; } return this.length;}; // 模拟实现 pop() 方法Array.prototype.myPop = function() { if (this .length === 0) return undefined; const lastElement = this[this.length - 1]; delete this[this.length - 1]; this.length--; return lastElement;}; // 模拟实现 unshift() 方法Array.prototype.myUnshift = function(...elements) { const originalLength = this.length; for (let i = originalLength - 1; i >= 0; i--) { this[i + elements.length] = this[i]; } for (let i = 0; i < elements.length; i++) { this[i] = elements[i]; } this.length = originalLength + elements.length; return this.length;}; // 模拟实现 shift() 方法Array.prototype.myShift = function() { if (this.length === 0) return undefined; const firstElement = this[0]; for (let i = 0; i < this.length - 1; i++) { this[i] = this[i + 1]; } delete this[this.length - 1]; this.length--; return firstElement;}; // 示例使用const myArray = [1, 2, 3]; console.log(myArray.myPush(4, 5)); // 输出:5 console.log(myArray); // 输出:[1, 2, 3, 4, 5] console.log(myArray.myPop()); // 输出:5 console.log(myArray); // 输出:[1, 2, 3, 4] console.log(myArray.myUnshift(0)); // 输出:5 console.log(myArray); // 输出:[0, 1, 2, 3, 4] console.log(myArray.myShift()); // 输出:0 console.log(myArray); // 输出:[1, 2, 3, 4]
实现修改和访问元素的方法
// 模拟实现 splice() 方法Array.prototype.mySplice = function(startIndex, deleteCount, ...elements) { const removedElements = []; const len = this.length; const deleteEndIndex = Math.min(startIndex + deleteCount, len); const moveCount = len - deleteEndIndex; // 保存删除的元素 for (let i = startIndex; i < deleteEndIndex; i++) { removedElements.push(this[i]); } // 移动剩余元素 for (let i = 0; i < moveCount; i++) { this[startIndex + deleteCount + i] = this[startIndex + deleteCount + i + moveCount]; } // 插入新元素 for (let i = 0; i < elements.length; i++) { this[startIndex + i] = elements[i]; } // 更新长度 this.length = len - deleteCount + elements.length; return removedElements;}; // 示例使用const myArray = [1, 2, 3, 4, 5]; console.log(myArray.mySplice(2, 2, 'a', 'b')); // 输出:[3, 4] console.log(myArray); // 输出:[1, 2, 'a', 'b', 5]
带你读《现代Javascript高级教程》四、JavaScript数组(3)https://developer.aliyun.com/article/1349683?groupCode=tech_library