- 博客(29)
- 收藏
- 关注
原创 2020年,我第一次很正式地写年终总结
好像我一直没有写年终总结的习惯,之前也一直都是看别人写年终总结。有时看别人的年终总结,会感叹别人这一年过的好充实。看了很多书,去了很多地方;或者结识了很多新的朋友,能力得到了很多的提高等等吧。也常常会感觉自己这一年好像没干什么事情,会有那么一点沮丧。当我写这篇文章的时候,我突然意识到自己好像已经忘记了2020年定下的什么目标了。不难想象自己当时定下目标的时候肯定是踌躇满志的,没想到已经连定下的什么目标都忘记了。所以写一下年终总结对我来说还是很有必要的,一方面可以记录一下自己这一年做了哪些事情。另一方面.
2021-01-22 01:02:35 494 5
原创 设计模式大冒险第二关:装饰者模式,煎饼果子的主场
这是关于设计模式系列的第二篇文章,在这个系列中,我们尽量不使用那些让你一听起来就感觉头大的解释设计模式的术语,那样相当于给大家带去了新的理解难度。我们会使用生活中的场景以及一些通俗易懂的小例子来给大家展示每一个设计模式使用的场景以及要解决的问题。这篇文章我们来讲解装饰者模式,那么什么是装饰者模式呢?对于名字来说你可能会感到比较陌生,但是你在生活中肯定经常使用这个模式去解决生活中的一些问题。只是你并不知道它原来是装饰者模式而已。生活中的装饰者模式想象一下,夏天到了,你家住在比较低的楼层,一到晚上许多的.
2020-11-02 08:05:17 224
原创 快使用Scriptable自己开发一个iPhone小组件吧
最近苹果的 iOS 系统升级到了 iOS 14,这次的更新我比较关注的就是升级的小组件功能,这次更新我们可以将小组件放置在主屏幕中的任何位置,可以让我们更加便捷的查看一些信息,从而省去了还需要打开APP去查看消息的步骤,感觉很方便。看到这里一些同学可能会说,功能是挺不错的,如果我自己也能开发一个小组件展示自己想看的内容就好了。是呀,哪一个小男孩不想拥有一个专属于自己的 iOS 小组件。别慌,最近发现了一个APP可以让我们通过使用JavaScript来创建我们自己想要的小组件。这个APP的名字就是Scr.
2020-10-25 12:40:43 3572 3
原创 报告老板,我们的H5页面在iOS11系统上白屏了!
时间回到一周前,当时刚开发完公司A项目的一个新的版本,等待着测试完成就进行发布。此时的我也准备从连续多日的紧张开发状态中走出来,以为可以稍稍放松一下。而那时的我还不知道,我即将面临一个强大的Bug选手,更不知道我要跟这个Bug来来回回进行多次的搏斗。当然,我们能看到这篇文章也就说明了我最终解决了这个Bug,而且这个过程也是相当的精彩的。什么?你不相信,那就让我来带你进入这个“跌宕起伏”的经历中吧。友情提示:接下来的文章也许有一点长,但是希望你能够坚持读下去。我相信我在解决这个Bug的过程中的一些思路会给.
2020-08-04 22:00:07 946
原创 try/catch/finally:“前端的好厚米,我觉得你们不够了解我呀~”
上面的每一道题目都有它的小心思,一不小心就容易出错。大家可以把自己测试的结果在评论区晒一晒。如果你做错了某道题,没有关系,通过这篇文章我们一起再来复习一下相关的知识点。看到就是学到,让我们开始吧。
2023-02-02 07:00:00 197
原创 如何优雅地中断 Promise?来试试 AbortController 吧
跟大家一起探索如何通过 AbortController 和 AbortSignal 从取消单个请求到取消多个请求;甚至是自己实现一个简单的可以取消的 Promise。文中还额外介绍了这两个知识点在普通的事件监听中以及在 Node.js 中的使用,感兴趣的同学快来看看呀~
2022-09-07 18:24:05 1616 1
原创 老妈版手把手教你实现一个Promise,保证一遍就会
上周末花时间录了一个视频,关于从0到1完整实现一个Promise的。大家感兴趣的话可以看一下。 老妈版手把手教你实现一个Promise,保证一遍就会 为什么要学习如何实现一个Promise呢?首先作为一个前端工程师如果去大公司面试,一般会要求手写代码的。这两年涉及手写代码的面试题中或多或少都会有与Promise相关的题目,如果知道如何实现一个Promise,那么对于这类题目应该是很容易解
2022-04-17 17:25:35 476 1
原创 Web页面子资源完整性校验详细指南
时间过得好快,距离上一篇文章动手写一个简单的编译器:在JavaScript中使用Swift的尾闭包语法发布已经过去快半年了,这半年时间也一直在想着按时更新文章;但是因为工作和生活的琐事,没有能够坚持下来。有点惭愧,感觉之前年初立下的计划快要实现不了了。希望接下来的这一段时间能够坚持更新文章吧。这次要跟大家分享的是关于Subresource Integrity(子资源完整性)的内容。如果平时对Web安全关注不是很多的话,可能没怎么听过这个术语。不知道也没关系,接下来我会跟大家一起来研究讨论一下这个内容,相信
2021-09-20 18:18:11 1335
原创 动手写一个简单的编译器:在JavaScript中使用Swift的尾闭包语法
首先跟大家说一下我为什么会有这个想法吧,因为最近在空闲时间学习Swift和SwiftUI的时候会经常使用到这种叫做尾闭包的语法,就觉得很有趣。同时因为很早之前看过jamiebuilds的the-super-tiny-compiler,就想着能不能自己也实现一个类似的有趣好玩简单的编译器。所以就有了js-trailing-closure-toy-compiler这个项目,以及今天的这篇文章。对于不熟悉Swift的同学来说,我先来解释一下什么是尾闭包。简单来说,就是如果一个函数的最后一个参数也是一个函数,那.
2021-04-06 08:20:15 188
原创 设计模式大冒险第五关:状态模式,if/else的“终结者”
这一篇文章是关于设计模式大冒险系列的第五篇文章,这一系列的每一篇文章我都希望能够通过通俗易懂的语言描述或者日常生活中的小例子来帮助大家理解好每一种设计模式。今天这篇文章来跟大家一起学习一下状态模式。相信读完这篇文章之后,你会收获很多。在以后的开发中,如果遇到了类似的情况就知道如何更好地处理,能够少用if和else语句,以及switch语句,写出更已读,扩展性更好,更易维护的程序。话不多说,我们开始今天的文章吧。开发过程中的一些场景我们在平时的开发过程中,经常会遇到这样一种情况:就是需要我们处理一个对.
2021-01-10 15:54:49 207
原创 设计模式大冒险第四关:单例模式,如何成为你的“唯一”
这一篇文章是关于设计模式大冒险系列的第四篇文章,这一系列的每一篇文章我都希望能够通过通俗易懂的语言描述或者日常生活中的小例子来帮助大家理解好每一种设计模式。今天这篇文章来跟大家一起学习一下单例模式。相信读完这篇文章之后,你肯定会有所收获的。关于单例模式,这应该是设计模式中最简单的一种了。大家如果学习过设计模式,可能很多设计模式长时间不用就忘记了,但是对于单例模式来说,你肯定不会忘记。因为它的理论知识比较简单,实践起来也很方便。但是,你真的会正确的使用单例模式吗?你知道单例模式在什么情况下使用是合适的,.
2020-12-08 22:52:07 177
原创 设计模式大冒险第三关:工厂模式,封装和解耦你的代码
这篇文章是关于设计模式系列的第三篇文章,这一系列的每一篇文章都会通过生活中的小例子以及一些简单的比喻让大家明白每一个设计模式要解决的是什么问题,然后通过什么方式解决的。希望大家在看过每篇文章之后都能够理解文章中讲解的设计模式,然后有所收获。话不多说,让我们开始今天的冒险吧。工厂模式的第一印象对于初次听说这个设计模式的同学来说,你们的第一印象是什么呢?既然是工厂模式,那么肯定跟工厂的一些功能或者行为有关系。那么工厂都有哪些功能和行为呢?首先工厂收集原始材料,然后将原始的材料进行加工,处理,设计之后就变成.
2020-11-12 00:01:59 147
原创 设计模式大冒险第一关:观察者模式
最近把之前学习过的这些设计模式又再次温习了一下,觉得还是有很多收获的。确实有了温故知新的感觉,所以准备在每个设计模式复习完之后都能够写一篇关于这个设计模式的文章,这样会让自己能够加深对这个设计模式的理解;也能够跟大家一起来探讨一下。今天我们来一起学习一下观察者模式,刚开始我们不需要知道观察者模式的定义是什么,这些我们到后面再去了解。我想先带着大家从生活中的一个小事例开始。从生活中熟悉的事情入手,会让我们更快速的理解这个模式的用途。生活中的小例子相信大家都关注过一些公众号,那么对于一个公众号来说,如果.
2020-10-11 18:19:42 237
原创 糟糕,在错误的分支开发了新功能,该怎么处理呢?
最近在开发项目的一个小需求的时候,发生了一件尴尬的事情。那就是当我把新功能开发完成的时候,忽然发现自己开发使用的分支是错误的分支。不过我记得之前学习git的时候有一个git stash的命令可以把当前没有提交的内容存档起来,然后可以在切换分支之后把当前的存档应用到目标分支。不过因为平时不怎么使用这个命令,所以有点生疏了,需要再次去看看文档。花了十几分钟,把git stash相关的命令又再次温习了一下,接着就顺利地把这个问题给解决掉。因为平时的开发也都是遵循相关的git流程,一般不会出现什么错误,而且平时.
2020-09-08 08:03:36 247
原创 想要在JS中把正则玩得飘逸,学会这几个函数的使用必不可少
在之前的一系列文章中,我们讲解了很多关于正则表达式的知识。那么作为一个前端工程师,如果想要把这些知识应用到我们平时的开发中去的话,就需要知道在JavaScript中,能够使用正则的函数有哪些?然后它们各自的功能是什么?有哪些需要注意的地方?只有掌握好了每一个方法的使用场景,我们才可能在需要使用的时候能够很快的想起来使用哪个方法效率最高,效果最好。这些确实是一些基础的知识,但是我相信应该有很多同学还没有系统的把这些知识学习一边。相信我,如果你能够把这篇文章看完的话,你肯定可以学习到一些新的知识。知道每一个.
2020-08-24 09:22:51 329
原创 想写出效率更高的正则表达式?试试固化分组和占有优先匹配吧
上次我们讲解了正则表达式量词匹配方式的贪婪匹配和懒惰匹配之后,一些同学给我的公众号留言说希望能够快点把量词匹配方式的下篇也写了。那么,这次我们就来学习一下量词的另外一种匹配方式,那就是占有优先的匹配方式。当然我们这篇文章还讲解了跟占有优先匹配功能一样的固化分组,以及使用肯定的顺序环视来模拟占有优先的匹配方式以及固化分组。准备好了吗,快来给自己的技能树上再添加一些技能吧。我们如果可以掌握这种匹配方式的原理的话,那么我们就有能力写出效率更高的正则表达式。在进行深入的学习之前,希望你至少对正则表达式的贪婪匹配.
2020-07-27 22:17:45 240
原创 给我一首歌的时间,带你深入理解正则表达式的贪婪匹配和懒惰匹配
如果想要系统的学习正则表达式的话,那么关于量词的匹配方式是必须要掌握好的内容。量词的匹配方式有三种,分别是匹配优先,忽略优先以及占有优先。今天这篇文章先来讲解一下匹配优先和忽略优先,什么,你觉得很难?相信我,读完这篇文章你肯定可以掌握的很好。不相信?那就让我来带着你试一试吧。在继续下面的文章之前,我们先来做个小练习题。那就是使用量词匹配一个简单的字符串,我们现在假设这个字符串是"hello world",如下图所示:有点正则表达式基础的同学很快就可以写出".*",很好,完美地匹配了我们的测试字符串。.
2020-07-13 13:17:26 403
原创 距离弄懂正则的环视,你只差这一篇文章
上一篇文章《正则表达式匹配素数的原理讲解》写完之后,一些同学给我留言说对于正则表达式的环视不是很理解;希望我能够讲解一下关于环视部分的内容。那么这篇文章的目的就是帮助大家理解什么是环视,环视有什么作用,以及在实际的开发中的一些例子。相信阅读本文之后,大家对于正则的环视会有更深入的理解。正则表达式的环视是什么环视顾名思义就是环顾四周,向左看看向看看,找一个合适的位置。环视匹配的是一个位置而不是字符,这点尤为重要。那么我们是怎么找到这个合适的位置的呢?当然是根据环视里面包含的条件去寻找这个位置。接下来我.
2020-07-06 13:20:27 267
原创 正则表达式匹配素数的原理讲解
为什么要写这么一篇文章呢?是因为自己最近在研究和学习正则表达式,然后在RegexGolf上练习技能的时候遇到了这么一道题目,觉得很有趣。我当时虽然也解决了这个问题,但是正则表达式写的有点长,而且也只算是一种取巧的解决方案。因为如果测试用例再多一点可能我写的这个正则表达式就不能够满足需求了。后来在复盘这道题目的解决方案的时候,查阅了很多相关的资料。发现了更简洁,更准确的答案。当我看到答案的那一瞬间,我忽然发现自己当初距离这个答案其实也不远,如果自己当时再好好研究一下,有可能就想出了更简洁的答案了。当然,也许
2020-06-26 16:50:30 708 1
原创 (a == 1 && a == 2 && a == 3)为true,你所不知道的那些答案
看到这个标题,一部分同学的第一反应可能是,又是这个老套的问题,人家都讲过好多遍了你还讲。同学,你想错啦。我可不是在炒冷饭。今天我们要从这个问题,延伸出更多的知识,保证超出你的预期。让我们开始吧。我记得我第一次看到这个题目的时候,感觉很吃惊,也很好奇;wow,还可以这样吗?这激起了我很大的兴趣去了解这个问题。我就迫不及待的想着怎么解决这个问题。后来使用了隐式转换这个比较常用的方法算是达到了题目的要求。当然,解题的方法还有很多,让我们一起来探索一下吧。解题的基本思路副作用 side effect当.
2020-06-14 00:35:58 704
原创 深入理解JS对象隐式类型转换的过程
在平时的开发工作中,我们有时会遇到需要将一个对象转换成基本类型的情况。很多情况下这个过程都是自动完成的,我们不需要手动处理。但是每当遇到这种情况的时候,你是否有思考过其背后的逻辑是怎样的?这篇文章会跟大家一起探讨一下这个问题。在开始这篇文章之前,大家可以尝试思考一下下面问题的答案,看看自己对这部分知识的掌握程度怎么样。let a = { [Symbol.toPrimitive] (hint) { if (hint === 'number') { conso
2020-05-25 12:20:12 594
原创 JavaScript学习 5.2.9 归并方法
归并方法 1-介绍:(1)reduce()(2)reduceRight()两个方法作用都差不多,只是遍历数组的方向不一样;reduce从数组的第一项遍历到最后一项,reduceRight则是从数组的最后一项遍历到第一项;所以只介绍reduce()方法的用法,reduceRight的用法一样。2-参数介绍:reduce(function, theInitial
2014-12-07 21:12:57 389
原创 JavaScript学习 5.2.7 位置方法
ECMAScript 5 为数组实例添加了两个位置方法:(1)indexOf()(2)lastIndexOf()这两个方法都接受两个参数:(1)要查找的项(2)表示查找起点位置的索引(可选的)其中,indexOf()方法从数组的开头(位置0)开始向后查找;lastIndexOf()方法从数组的尾部开始向前查找。这两个方法都要返回要查找的项在数组中的位置,或者
2014-11-13 18:49:38 306
原创 JavaScript学习 5.2.6 操作方法
ECMAScript为操作已经包含在数组中的项提供了很多方法今天要介绍三个方法:(1)concat()(2)slice()(3)splice()===========================================1.concat()方法:(1)在没有给concat()方法传递参数的情况下,它只是复制当前数组并返回副本。(2)如果传递的参数是一个
2014-11-13 18:09:14 295
原创 JavaScript学习 5.2.5 重排序方法
今天学习JavaScript数组中已经存在的两个重排序方法:(1)reverse()(2)sort()让我们先看一下这两个方法的名字,英语好的小朋友大概已经知道第一个方法的作用了吧,没错,这个方法会反转数组项的顺序。而第二个方法在没有参数传进来的时候,会默认调用数组中每一项的toString()转型方法,然后比较得到的字符串,以确定如何排序。具体用法看下面的代码。
2014-11-08 20:14:31 302
原创 JavaScript学习 5.2.4 队列方法
队列数据结构的访问规则是FIFO(First-In-First-Out,先进先出)。队列在列表的末端添加项,从列表的前端移除项。push()是向数组的末端添加项的方法,shift()是向数组的前端移除项的方法,结合使用shift()和push()方法,可以像使用队列那样使用数组。
2014-11-03 18:15:35 368
原创 JavaScript学习 5.2.3 栈方法
栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(JavaScript称为推入)和移除(JavaScript称为弹出),只发生在栈的顶部。JavaScript的数组也有类似的方法可以实现类似栈的行为。
2014-10-31 10:39:43 327
原创 JavaScript学习 5.2.0 Array类型的介绍
我学习JavaScript用的图书是JavaScript高级程序设计(第三版)我们先从数组开始学习,数组前面的章节我也会去学习的,每一篇关于JavaScript的学习我都会在文章的标题中写上编号的,方便大家一起交流沟通。也希望您能给我提出您的建议,我们大家一起共同学习进步。
2014-10-30 12:29:42 413
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人