javascript基础
文章平均质量分 90
程序员Better
一个热爱分享交流,专注前端的程序员(全网同名) 关注程序员Better学习更多前端学习内容
展开
-
面试20个人居然没有一个写出数组扁平化?如何手写flat函数
定义 : 扁平化就是将多维数组变成一维数组,不存在数组的嵌套实现数组扁平化的方法有很多, 评分也每个人有各自的看法, 欢迎大家在评论区留下你自己对每个实现方式的评分,一起学习交流哦!不会没关系,最重要的是肯学程序员Better让我们一起学习呀~原创 2022-11-05 23:18:23 · 1770 阅读 · 5 评论 -
最全js手写-建议死磕多练
最全的js手写-搞懂就完事了原创 2022-05-19 17:53:54 · 1029 阅读 · 2 评论 -
前端必看js数据结构与算法(队列,链表,集合,字典,树,图,堆)
队列队列简介一个先进先出的数据结构js中没有队列,但是可以用Array实现对队列的所有功能使用数组模拟先进先出的场景const queue = [] // 进队列queue.push(1)queue.push(2)// 出队列const itme1 = queue.shift()const itme2 = queue.shift()什么时候用食堂排队打饭所有先进先出的场景js 异步中的任务队列一个leetcode题 第933题链表链表是什么多个元素组原创 2021-10-11 09:19:14 · 1408 阅读 · 4 评论 -
超全超实用的ES2021新特性
ES2021新特性关于ES的新特性的学习必然是必须的,目前已发布已被增添到 Google Chrome V8 引擎中的特性将于本文学习1 String.prototype.replaceAll我们都知道String.prototype.replace()方法来完成字符串的替换'betterman'.replace('e','1111')// "b1111tterman"在 String.prototype.replace() 方法中,当第一个参数是字符串类型时,只替换第一个匹配的字符串,如果我原创 2021-03-26 14:28:44 · 872 阅读 · 0 评论 -
js优化汇总
js优化延期脚本带有defer属性的script标签。会等待DOM加载完成后再执行。无论是内联脚本还是外部脚本。动态脚本通过创建script标签,可以随时添加脚本,不会对页面加载有任何阻塞。标识符解析性能直接量和局部变量的访问速度比数组项和对象成员要快,具体快多少视浏览器而定。闭包的副作用因为闭包会保留作用域,所以经常访问范围之外的标识符会增加一些性能开销,为了减轻对运行速度的影响。最好将常用的域外变量存入局部变量中。缓存对象成员的值正因为原型链的存在,可以使js做到类似面向对象的继承机原创 2021-02-04 11:21:35 · 358 阅读 · 3 评论 -
2020前端经验总结
2020前端经验总结1.JS为什么单线程一个简单的原因就是,js在设计之初只是进行一些简单的表单校验,这完全不需要多线程,单线程完全可以胜任这项工作。即便后来前端发展迅速,承载的能力越来越多,也没有发展到非多线程不可的程度。而且还有一个主要的原因,设想一下,如果js是多线程的,在运行时多个线程同时对DOM元素进行操作,那具体以哪个线程为主就是个问题了,线程的调度问题是一个比较复杂的问题。HTML5新的标准中允许使用new Worker的方式来开启一个新的线程,去运行一段单独的js文件脚本,但是在这个原创 2020-12-24 14:24:28 · 831 阅读 · 0 评论 -
超全手撕js 摆脱初级前端
01.数组扁平化数组扁平化是指将一个多维数组变为一个一维数组const arr = [1, [2, [3, [4, 5]]], 6];// => [1, 2, 3, 4, 5, 6]方法一:使用flat()const res1 = arr.flat(Infinity);方法二:利用正则const res2 = JSON.stringify(arr).replace(/\[|\]/g, '').split(',');但数据类型都会变为字符串方法三:正则改良版本const原创 2020-09-29 14:48:29 · 182 阅读 · 0 评论 -
防抖与节流的封装函数与使用详解
防抖与节流在前端开发中有一部分的用户行为会频繁的触发事件执行,而对于DOM操作、资源加载等耗费性能的处理,很可能导致界面卡顿,甚至浏览器的崩溃。函数节流(throttle)和函数防抖(debounce)就是为了解决类似需求应运而生的。防抖函数防抖就是在函数需要频繁触发情况时,只有足够空闲的时间,才执行一次。好像公交司机会等人都上车后才关门一样。他不会上来一个人就触发一次关门,而是等人陆续上来......原创 2020-03-16 00:28:24 · 2254 阅读 · 1 评论 -
事件冒泡与事件捕获及事件委托
关于事件的捕获与事件的冒泡是js事件处理的原创 2020-04-25 00:20:04 · 329 阅读 · 0 评论 -
实现javascript的继承
ES6的extends使用extends 关键字实现类之间的继承。这比在ES5中使用继承要方便很多。//定义类父类class Animal { constructor(color) { this.color = color; } greet(sound) { console.log(sound); } } clas...原创 2020-03-29 23:57:52 · 148 阅读 · 0 评论 -
leetcode-斐波拉契数列(js)
认识斐波拉契数列第n 个数由数列的前两个相加而来: f(n) = f(n - 1) + f(n -2),用代码实现斐波拉契数列,无非就是要考察递归的写法,但是,单纯使用递归,在严格要求时间复杂度和空间复杂度上是不可行的,因为他做了无数次无用的计算.1, 1, 2, 3, 5, 8, 13, …普通实现 (递归)这种方式计算的时候会有很多重复的计算,而且递归的层数越来越深容易递归爆栈。...原创 2020-04-25 19:11:45 · 359 阅读 · 0 评论 -
js实现深拷贝
浅拷贝当把数组或对象简单赋值给其他变量的时候,实际上进行的是浅拷贝,浅拷贝是拷贝引用,只是将拷贝后的引用指向同一个对象实例,彼此间的操作还会互相影响。1. 使用 for in 遍历简单的拷贝对象的属性,如果属性是基础类型则没有问题,但是对象是对象类型(数组,函数)则只是拷贝的是引用,改变原始的属性,拷贝出来的属性也会跟着改变 function shallowCopy(source){ ...原创 2020-03-29 23:15:01 · 339 阅读 · 0 评论 -
闭包以及闭包的应用详解
闭包理解闭包,首先的了解JavaScript的作用域的特点javascript语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。注意点:在函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明的是一个全局变量!自己的闭包理解:闭包只是一种现象 ,内部函数可以使用外部函数环境中的变量,什么时候会产生闭包的现象呢当内部函数被保...原创 2020-03-14 19:57:13 · 394 阅读 · 0 评论 -
LeetCode-两数之和(js+Map数据结构)
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。实例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路:创建一-个mapfor循环遍历nums数组用target减nums[i],以计...原创 2020-04-27 22:12:21 · 348 阅读 · 0 评论 -
2020前端面试终极点题-javascript这些都会问
2020面试javascript原创 2020-04-13 09:41:54 · 271 阅读 · 0 评论 -
LeetCode-无重复字符的最长子串(js+set数据结构)
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。实例输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注...原创 2020-04-28 21:50:50 · 178 阅读 · 0 评论 -
手写实现一个简单版本的promise
手写一个promise实际上是非常复杂的,一个简洁版本的可以让我们明确设计思路// 三个常量用于表示状态const PENDING = 'pending'const RESOLVED = 'resolved'const REJECTED = 'rejected'function MyPromise(fn) { const that = this this.state =...原创 2020-04-08 17:45:05 · 469 阅读 · 0 评论 -
前端安全CSRF和XSS
1. CSRF 通常称为跨站请求伪造,英文名Cross-site request forgery缩写CSRF1.1 攻击原理实现攻击的两大关键因素:网站中的某个接口存在这种漏洞用户确实在A注册网站确实的登录过1.2 CSRF防御措施Token验证Referer验证隐藏令牌2. xss XSS (cross-site scrip...原创 2020-03-30 23:17:17 · 154 阅读 · 0 评论 -
关于javascript的数据类型判断
一. jsvascript中的数据类型原始类型:Boolean,string,number,null,undefined,symbol,BigInt(可以用任 精度表示整数)特殊:symbol:ES6新增,表示独一无二的值,数据类型 “symbol” 是一种原始数据类型,该类型的性质在于这个类型的值可以用来创建匿名的对象属性。该数据类型通常被用作一个对象属性的键值——当你想让它...原创 2020-03-29 15:36:44 · 202 阅读 · 0 评论 -
js的this理解以及call apply bind改变this指向
关于JavaScript中的this1. 函数预编译过程this - > windowfunction foo() { console.log(this);}foo(); //全局变量函数调用中的this也指向全局变量。注:ECMAScript5的strict模式不存在全局变量,这里的this是undefined。2. 全局作用域里this -> window...原创 2020-03-27 19:30:33 · 274 阅读 · 0 评论 -
JavaScript的排序算法实现
前言说起排序,绝对是每个计算机相关专业的数据结构课本里必须出现的词,期末考试试卷上最后一题也是跟这个相关,还记得当时的我还是大二,还是那么的…,当是在课本里学到的排序也是有很多种,我们一般有以下几种文章目录冒泡排序插入排序选择排序冒泡排序冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有...原创 2020-03-21 23:01:30 · 146 阅读 · 0 评论 -
常用数组处理方法与数组去重
数组处理1. 数组添加值利用数组的索引添加let color = ["red", "blue", "green"]// 数组中增加值// color[1] = "yellow"color[3] = "yellow"console.log (color)//[ 'red', 'blue', 'green', 'yellow' ]color[5] = "yellow"//[ 're...原创 2020-03-17 18:41:40 · 562 阅读 · 2 评论 -
立即执行函数详解及运用
立即执行函数定义:此类函数没有声明,在一次执行过后即释放。适合做初始化工作。作用:造出一个函数作用域,防止污染全局变量,它既不会提升,也不会污染全局对象,尽量的把功能封装在函数中首先得知道,只有表达式才能被执行符号执行被执行符号执行的表达式他的名字会被自动忽略当函数成为一个表达式时,它既不会提升,也不会污染全局对象。将函数变为一个函数表达式的方式之一,将函数用小括号括起来。然而...原创 2020-03-14 19:58:46 · 1327 阅读 · 3 评论 -
作用域作用域链详解与常见考题
作用域作用域链[[scopel]:每个javascript函数都是一个对象, 对象中有些属性我们可以访问,但有些不可以,这些属性仅供javascript引擎存取,[[scopel]就是其中一 个。[[scope]]指的就是我们所说的作用域,其中存储了运行期上下文的集合。作用域链:[[scope]]中 所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链...原创 2020-03-14 14:09:47 · 254 阅读 · 0 评论 -
关于预解析和执行期上下文,看完这个你就都会了
预编译简单理解记忆函数声明整体提升 系统会把函数提升到逻辑的最前面变量 声明提升这两句话不能解决的问题console.log(a);function a(a) {var a = 234;var a = function () {}a();}var a = 123;未经声明的变量归window所有imply global暗示全局变量:即任何变量,如果变量未经声...原创 2020-03-14 00:17:31 · 325 阅读 · 1 评论 -
JavaScript的原型和原型链必备理解
原型原型链重要知识点所有对象都是通过new 函数创建所有的函数也是对象 new Function()函数中可以有属性 Array.from所有对象都是引用类型原型 prototype所有函数都有一个属性:prototype,称之为函数原型默认情况下,prototype是一个普通的Object对象默认情况下,prototype中有一个属性,constructor,它也是...原创 2020-03-14 00:07:24 · 237 阅读 · 1 评论 -
ES6专题--2.什么?解构赋值这些你必须知道?
变量的解构赋值所谓的解构赋值,就是把 某个对象中的属性,当作变量,给解放出来,这样,今后就能够当作变量直接使用了;再也不用每个值一遍遍的用 . 或者 [] 赋值1.可以使用 :为解构出来的变量重命名 const { name : name123, age, gender } = person console.log(name123)...原创 2020-03-08 23:16:55 · 305 阅读 · 0 评论