随笔分类 - JavaScript
摘要:jsbridge 的概念 人们希望有一个中间层,它用来管理原生 native 和 h5 的通信问题,这个中间层就叫做 jsBridge。 严格来说 jsBridge 它并不是一个具体的东西,它只是一种约定的双向通信方式。之所以能建立约定,是因为 native 和 h5 都可以访问同一个 window
阅读全文
摘要:关于模块化 说一说 js 模块化这回事儿吧。 一开始 js 并没有模块化这个概念,但是没有模块化在应对一些大型前端应用开发时是非常不好管理的。所以社区催生出了一个野生模块化规范,叫做CommonJS。至今这个规范仍然被应用在 NodeJS 中。 后来,ECMA 也意识到了模块化是必须的,在 ES6
阅读全文
摘要:要求 写一个函数,接收一个数组,数组里面的子元素均为执行后能返回Promise对象的函数,要求这些函数按顺序依次执行,最终输出顺序执行的结果。 // 6s后输出[1,2,3] const funcArr = [ () => new Promise((resolve) => { setTimeout(
阅读全文
摘要:关键词 keypress与keydown有何区别? 你真的了解concat吗? exec是干啥的? keydown、keypress、keyup的区别 keydown 任意按键按下,按住不放会连续触发 keypress 与keydown基本没差别,任意按键按下,按住不放会连续触发,触发顺序排在key
阅读全文
摘要:函数的参数越少越好 有一个准则是:如果你的函数参数超过两个,就应该改为对象传入。 这样做是合理的,因为当函数参数超过两个时,参数顺序开始变得难以记忆,而且容易出现一种很尴尬的情况:比如我只需要传入第三个参数,因为其自身顺序的原因,不得不补齐前两个根本用不上的参数,以让它顺利排在第三位。 // bad
阅读全文
摘要:只使用业内通用的简写 有些业务描述会比较长,这时候往往有人会使用简写,但是如果简写不是业内通用的,而是自己随性创造的,这将给阅读带来很大困难。 比如,info-->infomation,def-->default,conf-->config,val-->value等等,这些都是业内广泛使用的简写,可
阅读全文
摘要:贪婪的正则 正则是默认贪婪的,它会尽可能多的匹配,我想这是一个大家都知道的事实。 经典例子: '12345678'.replace(/\d{3,7}/g, '#')// 输出: #8 可以看到,规则是匹配3~7个数字,由于正则默认是贪婪模式,匹配了最大数量7个; 如果我们希望它尽可能少的匹配,也就是
阅读全文
摘要:先贴代码: const base64String = window.btoa(String.fromCharCode(...new Uint8Array(buffer))) 看起来非常的简洁,优美。那么我们今天就来捋一捋,这个看似简单的背后,蕴含了怎样的原理。 首先我们得来说说arrayBuffer
阅读全文
摘要:元字符 正则表达式里面包含两种东西,一种叫元字符,一种叫原义文本字符。 这么说好像有点故作高深把话讲绕的感觉,简而言之,元字符就是关键字,原义文本字符就是自定义规则字。 元字符,或者叫保留字,表示这些字已经被正则“抢先注册”了,也就是占用了。 正则在抢先注册这些关键字的时候,已经尽量挑了一些比较冷门
阅读全文
摘要:说起正则表达式,可以说是很多同行的痛点,包括我在内,看了会,会了忘,因此写一个系列的小教程,试图加深一下印象。 基本概念 所谓正则表达式,就是一个用于匹配符合某种规则的字符串的表达式。简单来说,就是我们用表达式的形式来创建一个规则,然后拿着这个规则去不同字符串里面进行匹配,看下有没有匹配上我们规则的
阅读全文
摘要:前端页面的成功呈现,不仅要求在理想情况下没问题,当一些后台接口访问异常、静态文件获取失败时,仍然需要尽可能提供降级方案或给用户良好的反馈,不至于整个页面的奔溃。今天我将分享一些提高页面健壮性的技巧。 异常处理 主要指数据类型。这种情况最常出现在读取后台数据的时候,尤其是需要取数组、对象等引用类型时,
阅读全文
摘要:一份拥有良好可读性和拓展性的代码是项目里的良药,它不仅看着舒服,改起来也方便,甚至还能重用,各模块逻辑分明。“见码知功底”,而要达到高手那种简洁有力的境界,需要进行大量的总结和练习,今天我们就来谈谈如何写出优美的代码。 命名 好的命名应该具有如下特征: 1,意思正确。这是最基本的要求,不要挂羊头卖狗
阅读全文
摘要:网上关于this的指向问题的博客文章很多,但大多数都是复制粘贴,也不能用简洁的语言讲清楚,而是不停地写一些示例,看得人云里雾里。 其实关于this的指向并不难,只是没有人去做一个好的总结和试验,导致这个问题莫名其妙被复杂化了。 这一集,我只给出结论,以及判定的通用方法,至于是否确实如我所讲,大家可以
阅读全文
摘要:关于这部分我看过大量的文章,数不胜数,包括阮一峰的继承三部曲,还有各种慕课的视频教程,网上无数继承方法的对比。也对很多概念存在长期错误的理解。今天做一个正确的总结,用来给原型链和继承这块知识画上句号,而从深度上来说,则是深入到堆内存中去一探究竟。 业务场景 原型与原型链,从作用上来说,理解它在当前时
阅读全文
摘要:我时常在思考关于JS的很多知识在工作中有什么用?是否只能存在于面试这种理论性的东西中,对于我们的业务和工作,它们又能扮演怎样的角色。以后在JS档案揭秘的每一期里,都会加入我对于业务的思考,让这些知识不再是空中楼阁,而是有实际操作的意义。 业务场景 所有的核心在于执行顺序,它能帮助我们正确判断代码按照
阅读全文
摘要:程序的运行需要内存,对于一些需要持续运行很久的程序,尤其是服务器进程,如果不及时释放掉不再需要的内存,就会导致内存堆中的占用持续走高,最终可能导致程序崩溃。 不再需要使用的内存,却一直占用着空间,得不到释放,这就叫内存泄漏。 在JS中,我们都知道,基本数据类型是存在栈(stack)中,而引用数据类型
阅读全文
摘要:介绍两种方法,一是ES6的flat,简单粗暴。二是递归,也不麻烦。 flat ES6自带了flat方法,用于使一个嵌套的数组扁平化,默认展开一个嵌套层。flat方法接收一个数字类型参数,参数值即嵌套层的深度,默认为1。(注意是“嵌套层”不是“层”,如传入0则不展开任何嵌套) 需要注意的是:第一,fl
阅读全文
摘要:大体思路 上一篇我们讲了如何通过服务器生成一个upToken,那前端拿到这个token后又该如何操作?在这里我给出一个相当简洁的版本。 首先我们来看一下上传的思路:调用七牛模块的upload方法,生成一个observable对象,observable 可观察对象,该对象通过 subscribe 订阅
阅读全文
摘要:我也是第一次接触这个功能,只需一行代码即可搞定,直译过来就是“屏蔽上下文菜单”,特此记录一下吧。
阅读全文
摘要:JavaScript没有真正的类(class)和实例(instance),而是靠一种奇特的原型链模式,来实现继承。 在Brendan Eich设计之初,Javascript里面都是对象,必须有一种机制,将所有对象联系起来。所以,Brendan Eich设计了"继承"。但是,他不打算引入"类"(cla
阅读全文