[TypeScript] keyof

2021-04-27
阅读 2 分钟
4.5k
keyof 用来返回一个class类型或者interface类型的所有key组成的联合类型。可以看下面的一个例子:一: 当把keyof用在一般常见的class类型和interface类型上 {代码...} 在以上的代码里面 : {代码...} 就相当于: {代码...} 所以,当我们调用:fn('width')的时候就会报错,因为‘width’不在Point和Point2的key的列表里面。...

null 和undefined

2020-11-22
阅读 1 分钟
1.2k
null和undefined总是会放在一起讲,虽然说他们完全不是一个东西,但是很多人都不是很能准确地,简单地区分他俩。但是其实,他们确实又有些相同。

JavaScript- Event Loop

2020-02-20
阅读 5 分钟
1.5k
一:什么是单线程你一定听说过一句话:JavaScript是单线程的语言。单线程就是每一个当下,只有一件事情能被处理。相反地,作为人类,我们能够一边写代码,一边听歌,这是因为我们的大脑不是单线程的。假如把【写代码】和【听歌】看做是我们的JS代码,对应我们人类大脑的就是JS引擎,那么在每一个特定的时间点,JS引擎只...

JS - Promise的执行顺序

2020-02-10
阅读 3 分钟
8.2k
理解Promise的执行顺序,需要一些背景知识作为前提:1:每一个当下,正在被执行的JS代码是放在JS的主线程(我们叫JS Stack)的。同步的代码会按照代码顺序依次放入JS Stack,然后按照放入的顺序依次执行。

TypeScript - Generics(泛型)

2019-11-17
阅读 3 分钟
1.4k
Hello World of Generics让我们以范型的hello world:“identity方法:开始着手。identity方法是一个不论输入什么,输出都返回输入的方法。你可以把它看作和echo命令一样。

MobX - Mobx会对什么反应?

2019-11-15
阅读 3 分钟
1.5k
MobX会对在任何一个被监控的function执行的过程中被读取的已经存在的observable的属性进行反应。上面的这句话里面有几个关键的点:1:正在被读取正在读取的意思是:取用一个对象的属性。例如:user.name或者user['name']2:可被监控的function可被监控的function是computed的一个表述,有以下几种情况:

MobX - Computed

2019-11-15
阅读 1 分钟
1.4k
一:标记变量为computed的4种方式 1:使用@computed {代码...} 2: 使用computed {代码...} 3: 使用decorate {代码...} 4:默认是computed的情况observable.object和extendObservable会自动把getter属性标记为computed: {代码...}

MobX 数据结构 - Array

2019-11-13
阅读 3 分钟
3.1k
上面2种方式的作用是一样的,一个参数都是传入一个数组,这里特别注意一下第二个参数。第二个参数是一个对象,有很多属性可以设置,其中deep属性是一个布尔值,默认情况是true,当:1: {deep: true} 表示数组的元素也是observable的2: {deep: false} 表示数组的元素不是observable的。意思就是数组单个元素的值的改变,...

TypeScript - Class

2019-11-12
阅读 4 分钟
1.3k
但是,当我们谈到Class的时候,上面的结论并不总是正确。这个取决于我们的Class的属性是public, private,还是protected。

MobX - 数据结构之Object

2019-11-12
阅读 2 分钟
1.5k
在MobX里面,对于一个带有prototype的object,MobX并不会默认把它设置为observable。因为MobX认为这是这个对象的构造函数需要去管理的事情。这里,我们有2种方式:1:在constructor里面使用extendObservable

MobX - 使用observable

2019-11-12
阅读 4 分钟
3.6k
在Mobx里面,使得一个数据(model)observable,就相当于告诉Mobx去track(跟踪,监视)这个数据。当这个数据变化了,就会自动触发view的更新。一:首先我们来看一个没有用到Mobx的情况

function - JavaScrip的一等公民

2019-10-01
阅读 3 分钟
894
JavaScript是一门函数式语言,function是这门语言的一等公民。所以理解function,我个人觉得是学好JavaScript这门语言最重要的一部分。

多种获取对象的属性的方法,以及他们的区别

2019-09-20
阅读 2 分钟
2.5k
一个对象的属性本身,也有不同类型:是否是来自继承的属性,是否是可枚举的属性。JS也提供了多种不同的接口函数来支持开发者得到某些特定类型的属性。下面就来看一下都有哪些接口函数以及他们之间的区别:integer indices in ascending numeric, then strings in property creation order, then symbols in property cre...

Vue 和 React的对比

2019-09-17
阅读 2 分钟
4k
Vue和React应该算是现在市面上被使用最多的UI库了,这篇文章简单地来总结一些,我个人认为非常重要和宏观的对比,不会牵涉到细节方面。 一:二者的共同点 {代码...} 二:二者的不同 1: PureComponent && shouldComponentUpdate 在React应用中,当某个组件的状态发生变化时,它会以这个组件为根,重新渲染整组组...

ES module工作原理

2019-09-15
阅读 8 分钟
20.1k
ES6发布了官方的,标准化的Module特性,这一特性花了整整10年的时间。但是,在这之前,大家也都在模块化地编写JS代码。比如在server端的NodeJS,它是对CommonJS的一个实现;Require.js则是可以在浏览器使用,它是对AMD的一个实现。

for, for...in, for...of, forEach( )的区别

2019-09-10
阅读 4 分钟
1.9k
我们经常会用到循环,截止到ES6,我们总共有4种语法用于循环,但是它们各自的功能和使用场景却有很大区别。接下来我们讲对这4种语法一一讲解。首先我们来看一下有哪4种:

prototype VS __proto__ VS prototype chain

2019-09-08
阅读 2 分钟
1.4k
这篇文章讲解prototype,__proto__和prototype chain三者到底是什么以及三者之间的关系。我们先来看一段代码: {代码...} 最后两行代码的打印结果为: 我们打印了Dog,它是一个function;我们打印了dog,它是一个object。首先我们看到: {代码...} 我们可以看到MDN关于__proto__的解释为: 当实例化一个对象的时候,__pr...

JavaScript数据类型以及如何判断

2019-09-08
阅读 3 分钟
1.9k
一:ES6的数据结构总共有多少种?具体有哪些总的来说截止到ES6,总共有8种数据解构:7种原始数据解构 + 1种复杂数据解构7种原始数据解构:

前端经典算法题

2019-09-07
阅读 5 分钟
4.8k
1: 判断一个字符串是否回文回文是指类似于“上海自来水来自海上”或者“madam”,从前往后和从后往前读,字符串的内容是一样的,称为回文。判断一个字符串是否是回文有很多种思路:

冒泡排序,快速排序的JavaScript实现

2019-09-06
阅读 3 分钟
3.2k
这篇文章会介绍几种经典的排序算法思想和它们的javaScript实现。一:冒泡排序冒泡排序的核心思想是“比较”,即通过比较相邻元素的大小,从而实现从小到大或者从大到小的排序。下面我们以一个最终为从小到大的排序来理解一下冒泡排序的实现思路:

JavaScript的浅拷贝 VS 深拷贝

2019-09-05
阅读 2 分钟
1.3k
拷贝,我们常常用在把A对象的属性copy到B对象,这样B对象就拥有了A对象的属性。当B对象的属性不是基本数据类型,而是数组或者对象的时候,就会出现浅拷贝和深拷贝的区别,具体看下文的解释:

ES6 Promise Promise的执行顺序和异步性

2019-08-17
阅读 2 分钟
1.8k
在前面的ES6 Promise系列文章的第一篇和第二篇分别介绍了如何创建动态的Promise和已完成态的Promise。但是前面2篇里面的所有示例都相对简单,没有涉及到链式调用。

ES6 Promise - 创建完成态的Promise

2019-08-17
阅读 2 分钟
2.9k
我们在前一篇的文章里,介绍了怎么用Promise构造函数创建一个一开始是pending状态,最终为fulfilled或者rejected的Promise;因为这种类型的Promise有状态的变化,所以我们说它是动态类型的Promise。

ES6 Promise - Promise的生命周期和创建

2019-08-01
阅读 4 分钟
3.7k
Promise的中文意思是‘承诺’,什么叫承诺?承诺就是现在没有发生,在将来的某个时刻一定会发生的事情。放在编程语言的环境下,Promise就是异步事件的结果的占位符。我们不用去管异步事件的结果什么时候来,只需要关心异步事件的结果产生的时候,你想要做什么就对了。

ES6数组 - 新增的数组接口方法

2019-08-01
阅读 3 分钟
1.5k
一:find() 返回符合条件的第一个元素find方法接收2个参数,第一个参数为一个回调函数,第二个参数指定回调函数里的this。大概如下:find(function(value, index, thisArray){}, this)。其中,回调函数本身接受三个参数:元素的值,元素的下标,数组本身;回调函数的功能逻辑是想要寻找的元素应当满足的某种条件。一旦某...

ES6数组 - 新增的创建数组的方法

2019-07-31
阅读 3 分钟
7.2k
在ES6之前,创建数组的方式有2种:一: 通过数组字面量 {代码...} 二: 通过new Array()创建数组 {代码...} 在大多数情况下new Array()运行良好: {代码...} 但是new Array()有一种诡异的情况: {代码...} 当我们给new Array()传递单个数字参数时,这个数字不是作为数组元素,而是该数组的length属性而存在,而数组本身则...

ES6解构 - 解构函数参数

2019-07-31
阅读 2 分钟
18.7k
解构可以用在函数传递参数的过程中。我先先来看一下没有用到解构参数的例子,之后我们把它改造成解构参数。一:解构参数的使用场景1: 没有用到解构参数

ES6解构 - 数组解构

2019-07-31
阅读 3 分钟
34.1k
解构不仅可以用于对象类型,还可以用于数组。对象的解构是利用对象的属性名,而数组的解构是利用位置(坐标)的一一对应。本篇我们依然来看一下数组解构的基本用法:一:数组解构的使用场景1: 数组解构用于变量声明

ES6解构 - 对象解构

2019-07-30
阅读 2 分钟
28.5k
解构是ES6新加的解构功能,可以使得我们获取数据更方便,从而提高日常编码效率。解构可以用于对象,也可以用于数组,这篇文章我们只讲在对象类型上使用解构可以做哪些事情:一:解构用于变量声明

ES6 - WeakMap

2019-07-30
阅读 2 分钟
1k
Set有对应的WeakSet, Map也有WeakMap。这一篇,我们就来学习一下WeakMap有写什么特性。先来看一下WeakMap的基本特性: