javascript
鸭嘴兽Coder
这个作者很懒,什么都没留下…
展开
-
如何用可选链重构你的代码 | ES2020
目录重构哪里?三元运算符数组检查正则匹配属性检测不要滥用注意事项需要在声明前检查的情况把`?.`放错位置,或者忘记`?.`要小心可能会引起bug的情况null vs. undefined全等检测操作符优先级返回语句同样,可选链也能修复一些bug!首先,什么是可选链(optional-chaining),这是在ES2020中引入的新特性,在typescript v3.7中也已经支持。要知道,你不能只在代码中写foo.bar.baz(),而不检查foo是否存在,然后检查foo.bar是否存在,再检查foo.原创 2020-07-20 15:51:00 · 534 阅读 · 0 评论 -
leetcode-js面试题 | 2.两数相加
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807单向链表已定义:function ListNode(val)原创 2020-07-12 19:04:47 · 495 阅读 · 0 评论 -
数据结构Javascript实现 | 字典树 trie
概念字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。图示代码字典树节点class TrieNode { constructor(key) { this.key = key; this.children = []; }原创 2020-07-11 20:17:32 · 657 阅读 · 0 评论 -
leetcode-js面试题 | 1.两数之和
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法1. 双重循环时间复杂度:O(n^2)var twoSum = function(nums, target) {原创 2020-06-27 13:25:04 · 199 阅读 · 0 评论 -
js事件循环机制和ui渲染 | 前端面试经典
js事件循环机制和ui渲染事件循环任务队列所有的任务可以分为同步任务和异步任务,同步任务,顾名思义,就是立即执行的任务,同步任务一般会直接进入到主线程中执行;而异步任务,就是异步执行的任务,比如ajax网络请求,setTimeout 定时函数等都属于异步任务,异步任务会通过任务队列( Event Queue )的机制来进行协调。同步和异步任务分别进入不同的执行环境,同步的进入主线程,即主执行栈,异步的进入 Event Queue 。主线程内的任务执行完毕为空,会去 Event Queue 读取对应的原创 2020-06-21 08:22:19 · 1814 阅读 · 0 评论 -
js防抖和节流的实现及使用
作用防抖和节流是针对响应跟不上触发频率这类问题的两种解决方案。 在给 DOM 绑定事件时,有些事件我们是无法控制触发频率的。 如鼠标移动事件 onmousemove, 滚动滚动条事件 onscroll,窗口大小改变事件 onresize,瞬间的操作都会导致这些事件会被高频触发。 如果事件的回调函数较为复杂,就会导致响应跟不上触发,出现页面卡顿,假死现象。 在实时检查输入时,如果我们绑定 onkeyup 事件发请求去服务端检查,用户输入过程中,事件的触发频率也会很高,会导致大量的请求发出,响应速度会大大跟不原创 2020-05-27 18:21:36 · 2338 阅读 · 2 评论 -
处理js大数运算进度丢失
该问题为前端js大数运算精度丢失问题,当超过16位数时会出现低位数不精准,这是由于前端js在高位数计算时转为科学计算法导致。解决方案1: 对前后端限制数字位数一般在项目或业务中是不会涉及到那么大的数位,没必要吹毛求疵。解决方案2: 引入bignumber.js该库用切分逻辑处理了大数运算,用法也比较便捷。????github...原创 2020-05-16 10:33:41 · 752 阅读 · 0 评论 -
数据结构Javascript实现 | 优先队列 PriorityQueue
概念优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列的出队顺序与入队顺序无关,和优先级有关。图示代码优先队列节点class Node { constructor(data, priority) { this.data = data; this.priority = priority; }}优先队列类class PriorityQueue { constructor() {原创 2020-05-16 09:59:33 · 746 阅读 · 0 评论 -
数据结构Javascript实现 | 堆 heap
概念堆可以被看做一棵完全二叉树的数组对象。图示代码最小堆 - 根节点为最小值的堆class MinHeap { constructor() { // index为0时赋值null,便于计算子节点index和父节点index的关系 this.heap = [null] } insert(node) { this.heap.push(node); ...原创 2020-04-28 16:29:05 · 541 阅读 · 0 评论 -
数据结构Javascript实现 | 哈希表 hashTable
概念栈只允许在有序的线性数据集合的一端 (栈顶) 进行数据插入和移除。因而按照后进先出 (LIFO, Last In First Out) 的原理运作。图示代码不处理冲突的哈希表:class HashTable_WithoutSolveClash { constructor(size) { this.table = new Array(size); } /** 哈...原创 2020-04-24 14:55:05 · 164 阅读 · 0 评论 -
数据结构Javascript实现 | 栈 stack
概念栈只允许在有序的线性数据集合的一端 (栈顶) 进行数据插入和移除。因而按照后进先出 (LIFO, Last In First Out) 的原理运作。图示代码栈节点class Node { constructor(element) { this.element = element; this.next = null; }}栈 Classclass St...原创 2020-04-22 11:33:35 · 247 阅读 · 0 评论 -
数据结构Javascript实现 | 队列 queue
图示队列节点class Node { constructor(element) { this.element = element; this.next = null; }}队列class Queue { constructor() { this.head = null; this.tail = null; } /** * ...原创 2020-04-18 15:02:24 · 146 阅读 · 0 评论 -
ES2020中实用的新特性一览
目录私有变量 Private Class VariablesPromise.allSettled空值合并运算符 Nullish Coalescing Operator可选链 Optional Chaining OperatorBigInt动态导入 Dynamic Import私有变量 Private Class Variables类的主要作用之一是将我们的代码包含在可重用的模块中。所以会在许多...翻译 2020-04-14 10:40:31 · 425 阅读 · 0 评论 -
js数据结构之双向链表doublyLinkedList
双向链表图示:代码实现(包含增、删、遍历方法)及示例:/** * 双向链表节点 * 包含三个值: 当前节点的值和分别指向前后节点的链接 */class Node { constructor(element) { this.element = element; this.next = null; this.prev = null; }}/** 双...原创 2020-04-06 11:27:58 · 176 阅读 · 0 评论 -
js数据结构之单向链表SinglyLinkedList
单向链表图示:代码实现(包含头尾部插入、搜索、删除、正反向遍历)及示例:/** * 单向链表节点 * 包含两个值: 当前节点的值和一个指向下一个节点的链接 */class Node { constructor(data) { this.data = data; this.next = null; }}/** 单向链表 */class LinkedLis...原创 2020-04-06 11:10:49 · 259 阅读 · 0 评论 -
【总结】常用正则表达式集合
常用字符匹配中文字符 /[\u4e00-\u9fa5]/g匹配双字节字符 /[^\x00-\xff]/ig匹配行尾行首空白 /(^\s*)|(\s*$)/只能输入数字 /^\d+$/只能输入n个数字 /^\d{n}$/至少输入n个以上数字 /^\d{n,}$/只能输入m到n个数字 /^\d{m,n}$/只能由英文字母组成 /^[a-z]+$/i只能由大写英原创 2017-08-31 21:38:00 · 421 阅读 · 0 评论 -
[js]实现自定义animate动画库
animate.js –>//获取元素样式function getStyle(ele, attr) { return ele.currentStyle ? ele.currentStyle[attr] : window.getComputedStyle(ele, null)[attr];}function animate(ele, attrs, time, callback) {原创 2017-08-23 20:39:03 · 2537 阅读 · 0 评论 -
[js]数组去重的几种方法
问题:随机10个不相同的数(数值范围11~25之间的)并且存放到数组中代码:// 函数:随机生成一个从min到max的数function randFn(min, max){ return parseInt(Math.random() * (max-min+1) + min);}// 方法1: 遍历已存入的数和当前随机的数比较,引入开关判断是否存放var arr = [];for(v原创 2017-08-23 20:04:29 · 393 阅读 · 0 评论 -
[js]圆周运动&类s运动
// 圆周运动function circularMove(obj){ var deg = 0; var timer = setInterval(function(){ deg++; var x = 100 * Math.cos(deg * Math.PI/180); var y = 100 * Math.sin(deg * Math.原创 2017-08-26 10:08:12 · 503 阅读 · 0 评论