首先链表是一种数据结构,JavaScript中并没有链表,但是可以用Object模拟链表,所以在JavaScript中,链表表示的是用Object模拟的一种链表数据结构。
一. 什么是链表
- 多个元素组成的链表
- 元素存储不连续,用next指针联系
- 链表和数组的区别
- 数组:增删非首尾元素时往往需要移动元素
- 链表:增删非首尾元素不需要移动元素,只需要更改next的指向即可
- 简单的链表模型
const a = {val: 'a'}
const b = {val: 'b'}
const c = {val: 'c'}
const d = {val: 'd'}
a.next = b
b.next = c
c.next = d
二. 对链表的操作
- 通过一个指针来遍历
let p = a
while(p) {
console.log(p.val);
p = p.next
}
- 通过改变next的执行来达到删除链表
- 如删除上述链表模型中的c
- 改变节点b的next指向
b.next = d
,即可达到删除节点c的目的
三. 前端与链表
- 链表与原型链
- 原型链上有两个属性分别是
__proto__
,prototype
, -
__proto__
相当于链表上的next,当前对象通过__proto__
指向原型对象, - 原型链通过
__proto__
属性连接各种原型对象- obj -> Object.prototype -> null
- func -> Function.prototype -> Object.prototype -> null
- arr -> Array.prototype -> Object.prototype -> null
- 通过一个原型链instanceof方法来理解
const instanceof1 = (A, B) => { let p = A while(p) { if(p === B.prototype) { return true } p = p.__proto__ } return false } // console.log(instanceof1([], Array)) true
- 原型链上有两个属性分别是