随笔分类 - Javascript
js 语言
摘要:看其他人的博客时, 发现了类 Go 的错误处理方式很精妙, 笔者在其上还加了一些改进. 问题 我们需要在 try catch 中处理异步函数的错误, 代码如下 try { const result = await fetch('someAPI') console.log('fetch success
阅读全文
摘要:工作中常常用 API 的入参是非必填的,而实例的属性因为有默认值而一定存在的情况,举个例子: type TestOptions = { num?: number str?: string hookFn?: () => string } const defaultOptions = { num: 1,
阅读全文
摘要:any 任意类型。即不作任何约束,编译时会跳过对其的类型检查。 表现: 可以被任意值所赋值 可以赋值给任意定义 访问一切这个变量下的属性或者方法都不会做检查而报错。 如下列的代码,均不对 test 变量做类型检查。 // 1. 可以被任意值所赋值 let test: any test = {} te
阅读全文
摘要:面试时候碰到这个问题,多数的回答都是比起 var,后两者不会变量提升,并且生效于块级作用域。但这还不够。 先上结论:let,var,const,三者都会变量提升。 var 是创建和初始化的过程都提升了,所以提前访问得到 undefined。 let 只是创建过程提升,提前访问报错 xx is not
阅读全文
摘要:分析 深拷贝函数也是一个老生常谈的话题了,它的实现有很多函数库的版本,例如 lodash 的 _.cloneDeep。 或者图个省事就直接 JSON.parse(JSON.stringify()),当然这么做有许多缺点,没有考虑循环引用问题,也没有考虑其他一些数据类型的不便如 BigInt,Map,
阅读全文
摘要:问题 var obj = { 2: '3', 8: '9', length: 2, splice: Array.prototype.splice, push: Array.prototype.push } obj.push(1); console.log(obj); obj.push(2); con
阅读全文
摘要:基础输出题 题目1 记住 new Promise 里的参数函数,是同步被执行的,故而先输出 1,2. resolve 后还需要等待进入下一个事件循环。then 把参数函数推入微任务队列,并不直接执行。 输出 4,接着事件循环进入下一轮,输出 3. 题目2 来自网易。给出一个 promise 请问这三
阅读全文
摘要:写作背景 猛然间发现都需要在牛客网上视频面试了。 好气人呀,一周内面试笔者居然再原型链问题上被连续绊倒两次,然后被判定为 JS 基础薄弱。真的好气人呀,所以笔者研究了一下午的原型链,打算之后再也不会被这个绊倒,其遇到的题目和大家分享。 题目 题目1,来自快手 真的再很多地方出现了,我一搜才发现其他朋
阅读全文
摘要:问题 笔者第一反应就懵逼,搞不懂特意放一个 干什么,因为 的原型链属性 prototype 只和 有关系,和 对象本身没啥关系。 面试中笔者猜测 输出结果 最后面试完,特意去输出了下结果 也就是说 A 可以找到 Function.prototype 和 Object.prototype 的属性。而
阅读全文
摘要:问题 工作过程中我们时常会碰到栈溢出的问题,而这经常是由死循环引起的,见下面的代码。 那今日看了李兵老师的 "图解 Google V8 堆和栈:函数调用时如何影响到内存布局的" ,笔者才对栈溢出有了更深的了解。 首先为什么会使用栈的结构来管理函数调用? 这是因为在父函数中调用子函数,执行代码的控制权
阅读全文
摘要:提问 CommonJS 中的 require/exports 和 ES6 中的 import/export 区别? 回答 CommonJS 模块是运行时加载,ES6 Modules 是编译时加载并输出接口。 CommonJS 输出是值的拷贝;ES6 Modules输出的是值的引用,被输出模块的内部的
阅读全文
摘要:面试时又被人问起 JS 的 Iterator 迭代器。查阅 "MDN" ,得知 非标准。 Iterator 函数是一个 SpiderMonkey 专有特性,并且会在某一时刻被删除。为将来使用的话,请考虑使用 for...of 循环和 迭代协议。 如果用此 API 那么遍历对象还得想下面这样,手动包上
阅读全文
摘要:面试中少不了面试官问箭头函数的 this 有何特殊。我们知道虽然 babel 转义后是在外层定义 _this 指向了外层的 this ,然后在传给内层的函数来解决这个事情的 function index() { let func = () => { console.log(this) } } //
阅读全文
摘要:结构 subs里放置Watcher,当改变data数据时,触发对应的Dep通知其subs里的watcher进行更新。 代码 首先在 observer 的过程中会注册 get 方法,该方法用来进行「依赖收集」。在它的闭包中会有一个 Dep 对象,这个对象用来存放 Watcher 对象的实例。其实「依赖
阅读全文
摘要:在线 在线校验工具:http://regex.zjmainstay.cn/ 速查表 原链接:http://www.jb51.net/shouce/jquery1.82/regexp.html reg Description \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八
阅读全文
摘要:重读了一遍以前留下的读书笔记,发现也就一个柯里化这个概念记不清而已了。 而且书的内容真的老了,读起来恍如隔世,所以在下文里加了不少的 2020年3月更新 第一章 精华 Javascript建立在一些非常优秀的想法和少数非常糟糕的想法之上, 优秀的想法包括函数、弱类型、动态对象和富有表现力的对象字面量
阅读全文
摘要:解答 stackoverflow 原提问,https://stackoverflow.com/questions/9468055/what-does-new-in-javascript-do-anyway new f(a, b, c) is eaqal to var newInstance = {}
阅读全文
摘要:情景描述 特殊字符\u2028导致的Javascript脚本异常 JSONP请求的时候返回的是一个Js方法,如果其结果对象的属性值含有非法字符的话,浏览器解析失败就会报错。 常见于文章内容,textarea的输入。 解释 \u2028是一个神奇的字符,是行分隔符,会被浏览器理解为换行,而在Javas
阅读全文
摘要:网址:http://kangax.github.io/compat table/es6 网站收录了各编译器对es6及其后版本的支持度,其中我对以下几个并不了解所为何物 Traceur Traceur 是一个来自 Google 的 Javascript 编译器,通过它可以体验一些很新并且有趣的 Jav
阅读全文
摘要:防抖 防抖技术即是可以把多个顺序地调用合并成一次,是在停止操作的一定时间内,规定事件才被触发一次。 通俗一点来说,看看下面这个简化的例子: 大概功能就是如果 250ms 内没有连续触发两次 scroll 事件,那么才会触发我们真正想在 scroll 事件中触发的函数。 节流(Throttling)
阅读全文

浙公网安备 33010602011771号