数据结构(四)-实现字典对象和散列表(hashMap)、Map类实现字典和散列表

上一节讲了集合,虽然集合和散列表也是类似集合的键值对,但是集合我们只关注值,形式是 [值,值]。在字典和散列表当中,通过[键,值]的形式来存储数据,又称之为关联数组,这也就是可以通过[]来访问对象的原因

字典

1
2
3
4
5
6
7
8
9
10
11
12
// 因为字典的key有可能不是字符串,所以需要,将字典的key转换为字符串
function defaultToString (item) {
if (item === null) {
return `NULL`
} else if (item === 'undefined') {
return `UNDEFINED`
} else if (typeof item === 'string' || item instanceof String) {
return `${item}`
}
return item.toString()
}

阅读全文

数据结构(三)-实现集合对象,Set类实现集合

集合,不允许值重复的顺序数据结构,类似Set数据结构。集合中主要关注点是值的本身。通过学习集合数据结构掌握增删查、交集、并集、差集等数学运算,学习ES6原生Set类,以及自己通过对象实现Set

可以理解为ES6中的Set就是集合,存储形式是[值,值]

阅读全文

数据结构(二)——链表、双向链表、循环链表、链表实现栈

链表

在内存中,数组是连续的,不间断的。如果从数组中间插入或者删除一个元素需要移动元素。
链表和数组不同,链表中的元素在内存中不是连续的,每个元素由一个存储元素本身的节点和指向下一个元素的引用

阅读全文

数据结构(一)——栈(Stack)和队列、双端队列

什么是栈

(stack)是一种遵循后进先出(LIFO,Last In First Out)原则的有序集合,新添加或者待删除的保存在栈顶,另一端称作栈底。新添加的元素靠近栈顶,反之旧元素靠近栈底,只允许一端加入(push)数据和移除(pop)数据

阅读全文

WebKit技术内幕读书笔记(一):概览与网页结构

最近在看《WebKit技术内幕》这本书,这本书讲述了Webkit项目和Chromium项目,HTML5原理,Webkit工作原理,Chromium机制等。顺便记录下笔记。

阅读全文

js基础知识整理(编译、作用域,词法作用域,闭包,执行上下文,GC,this,继承等,万字总结)(一)

编译型语言与解释型语言

代码运行前将代码通过编译器装换为机器语言,运行时不需要重新编译,比如C,C++

解释型语言,又称为脚本语言,代码在运行时转换,速度慢于编译型语言,比如ruby,js

阅读全文

js基础知识整理(编译、作用域,词法作用域,闭包,执行上下文,GC,this,继承等,万字总结)(三)

其他

自己实现一个new,call,bind
new

new调用上面已经实现过,现在来复习一下,不写代码,过一下流程。new调用是在this绑定一节中出现的,this绑定的方式主要是默认绑定(指向window),显式绑定(call,apply,bind,以及各种js内置api),隐式绑定主要是指向当前调用对象上下文,以及new调用(创建新对象),new调用执行了以下操作

阅读全文

js基础知识整理(编译、作用域,词法作用域,闭包,执行上下文,GC,this,继承等,万字总结)(二)

this

js代码编译阶段,会创建执行上下文,又会创建当前上下文的词法环境和变量环境,this就是词法环境记录的一个属性。
this是在运行时(函数被调用时)绑定的,不是在编译/编写时候。this和函数声明位置没有关系,只和函数调用位置有关系,它指向哪里完全取决函数在哪里被调用。这点和词法作用域相反,词法作用域和函数调用方式无关,和声明位置有关。

阅读全文

V8中的垃圾回收器与内存管理

最近在正好看到垃圾回收相关的东西,所以借此写一篇记录一下以加深印象

v8内存管理

v8虚拟机的内存,64位系统限制大小1.4GB,32位系统0.7GB。
js中的引用类型都是存放在堆内存中

阅读全文

Typescript中的高级类型

最近阅读了 lib.es5.d.ts 中的各种声明文件,里面涉及了一些官方文档中没有提到的高级类型用法和一些工具类,整理出来以便日后复习学习。

阅读全文