javascript
1
每天都在掉头发
这个作者很懒,什么都没留下…
展开
-
js正则表达式
声明方式字面量形式new形式常用方法1.test:匹配到返回true,没有匹配到返回falsepattern.test(string)2.exec:返回匹配项及其索引pattern.exec(string)3.replace:替换字符string.replace(pattern,'a')4.match:将所有匹配项以数组形式返回string.match(pattern)修饰符g:全局匹配i:忽略大小写m:多行匹配字符组\d:转载 2021-07-25 18:07:58 · 163 阅读 · 0 评论 -
二叉树的基本概念
二叉树:每个节点有最多两个子节点满二叉树:除最后一层外,每个节点都有两个子节点完全二叉树: 除最后一层外,其他层节点数目都为该层最大值, 最后一层的节点集中在左侧 平衡二叉树(AVL二叉树):每个节点左右两颗子树的高度相差不超过1二叉查找树:任意节点的左节点小于根节点,右节点大于根节点查找次数等于二叉查找树的高度二叉查找树会出现瘸腿的情况,影响查找性能红黑树:自平衡的二叉查找树1.节点为黑色或者红色2.根节点为黑色,...原创 2021-07-25 13:41:06 · 211 阅读 · 0 评论 -
set、map、weakset、weakmap的区别
1.setset表示集合,可以存储原始值和对象引用,存储的数据必须是唯一值size()add()delete()has()clear()2.mapmap表示字典,用键值对的形式存放数据,键和值可以是原始值和对象引用size()set(key,value)get(key)has(key)delet(key)clear()3.weaksetweakset是弱集合,存储的数据只能是对象,对对象的引用是弱引用在没有其他引用和该键引用同一对象,这个对象将会被垃圾.原创 2021-07-22 16:10:33 · 1440 阅读 · 0 评论 -
数组降维方法
递归算法function method(arr) { let res = []; let toArr = function(arr) { for (let i = 0; i < arr.length; i++) { if (arr[i] instanceof Array) { toArr(arr[i]) } else { res.push(arr[i]原创 2021-07-21 17:25:32 · 199 阅读 · 0 评论 -
类型转换方法
转化成布尔值1.利用Boolean()方法2.两个!!3.使用==时隐式转换方法转化为数值型1.Number()2.parseInt()3.parseFloat()转化为字符串类型1.toString()2.string()3.+" "4.join()原创 2021-07-19 00:05:21 · 122 阅读 · 0 评论 -
this指向问题
1.全局作用域中的this指向的是window2.非严格模式下,函数中的this指向函数调用者3.严格模式下,函数中的this指向undefined4.构造函数中的this指向实例对象5.箭头函数的this指向函数定义时的对象6.DOM事件处理函数中this一般指向DOM元素本身(IE级除外)7.匿名函数的this一般指向window8.定时器中函数的this指向window9.利用call\apply\bind等能够改变this的指向...原创 2021-07-16 23:03:50 · 90 阅读 · 0 评论 -
变量提升与匿名函数
a存在变量提升,所以a等于undefinedvar a = 1;let b = 4;(function() { console.log(a);//undefined var a = 3; let b = 4; console.log(a, b);//3,4})()var a = 1;let b = 4;function try1() { var a = 3; console.log(a);//undefined let b =.原创 2021-07-16 22:30:43 · 516 阅读 · 1 评论 -
JS中的事件
事件流事件捕获:document对象到目标对象事件冒泡:目标对象到document对象注:老版本只支持事件冒泡1.HTML事件处理<button id="btn" onclick="handle()">按钮</button>function handle(){ alert("HELLO")}2.DOM0级事件处理<button id="btn">按钮</button>let btn=document.get转载 2021-07-13 22:21:50 · 71 阅读 · 0 评论 -
async-await和Promise的关系
1.执行async函数,返回的是Promise对象,即使返回的是普通数据类型也会被Promise重新封装2.执行await获得的结果其实相当于执行Promise的then方法3.利用try...catch实际相当于执行Promise的catch方法async function fn1() { return 100//相当于return Promise.resolve(100)}!(async function () { const p1 = Promise.resolve原创 2021-07-12 16:57:28 · 196 阅读 · 0 评论 -
ajax、FetchAPI、Axios
1.Ajax1.Ajax属于原生js范围内,使用XHR对象2.针对MVC编程3.可以使用JQuery和Promise进行封装4.容易出现回调地域情况$.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () {}, error: function () {}});2.FetchAPI1.基于Promise进行设计,未使用XHR对象原创 2021-07-12 11:22:32 · 146 阅读 · 0 评论 -
图片懒加载
简介当图片进入或者即将展示区域时,才进行图片的加载操作,向服务器发送HTTP请求,之前用占位符代替原理1.在图片的标签中加入自定义属性data-src,在该属性中保存实际图片src的地址,将标签的src设置为占位图地址(js只会向src地址发送请求)2.获取浏览器滚动高度x、浏览器可视区域高度z、图片到页面顶部高度y3.当浏览器滚动高度x加上浏览器可视区域高度z大于等于图片到页面顶部高度y时,将标签的src属性的值替换为自定义属性data-src的值代码实现<img原创 2021-07-09 17:31:15 · 157 阅读 · 0 评论 -
获取页面节点方法
直接获取节点1.document.getElementById('元素的ID')2.document.getElementsByTagName('元素的标签名')3.document.getElementsByName(‘元素的name属性’)4.document.getElementsByClassName("元素的类名")5.document.querySelector("选择器")6.document.querySelectorAll("选择器")注:后两个是ES6新增.原创 2021-07-07 17:22:09 · 857 阅读 · 0 评论 -
for in和for of区别
for infor in主要用于遍历对象中的键名不仅能遍历对象自身的键名,还能遍历出原型链上的键名主要用于遍历对象,而不是数组遍历数组时返回的是索引值for offor of可以用来遍历包含symbol.iterator属性的数据结构包括数组、字符串、map、set、伪数组等主要返回的是键值不遍历原型链上的键值...原创 2021-07-07 14:36:52 · 117 阅读 · 0 评论 -
Javascript与其他语言的区别
JS是解释型语言,java是编译型语言JS是动态类型语言,java是静态类型语言JS是基于对象,java是面向对象JS可以直接在任何浏览器上运行,java需要借助于虚拟机实现跨平台JS的安全性会更好,不会读取本地数据高级语言都需要翻译成机器语言才能执行解释型语言:执行时由解释器逐条翻译并执行编译型语言:执行前先由编译器全部翻译,再执行编译型语言执行速度更快,解释型语言最主要的是安全性JS与其他基于类的面向对象的语言有差异,JS的对象具有动态性,在使用对象时可以为对原创 2021-07-01 16:04:12 · 1231 阅读 · 0 评论 -
函数柯里化
概念把多参数的函数转化为单参数的函数可以增加代码复用性、可读性、层次性但是由于使用了闭包,所以可能会产生内存泄漏问题主要特点1.参数复用:对其中某些参数的操作可以保存下来,进行复用2.提前返回:可以避免重复的判断,在一开始就能确定使用什么方法,提前返回3.延迟执行:在没有输入的时候不计算结果,在需要的时候再计算简单例子function curryAdd(x){ return function(y){ return x+y }};原创 2021-06-30 15:40:20 · 87 阅读 · 0 评论 -
手写JSONP
function jsonp(url, params, callback) { // 判断是都有参数 let queryString = url.indexOf("?") === "-1" ? "?" : "&"; // 添加参数 for (var k in params) { if (params.hasOwnProperty(k)) { queryString = queryString + k + "=" + para.原创 2021-06-29 18:43:07 · 98 阅读 · 0 评论 -
apply,call,bind
Function.prototype.myCall = function(context) { if (typeof this !== 'function') { throw new TypeError('Error') } context = context || window; // 在调用对象上设置一个新的方法fn,这个fn指向被调用方法 context.fn = this; let args = [...arguments].slic.原创 2021-06-24 22:21:04 · 91 阅读 · 0 评论 -
手写promise
// 可以实现异步的promiseclass myPromise { constructor(fn) { this.state = 'pending'; this.value = undefined; this.reason = undefined; // 成功存放的数组 this.onResolvedCallbacks = []; // 失败存放法数组 this.onRejected.原创 2021-06-24 16:11:39 · 108 阅读 · 0 评论 -
Promise简介
介绍Promise是一种异步编程解决方法,Promise本质上是一个构造函数或者类,可以产生promise实例对象Promise构造函数上有resolve,reject,all,race方法,Promise原型对象上有then、catch、finally方法特点1.promise对象有三种状态pending、fulfilled、rejected2.primise对象的状态只受到异步操作的结果影响3.状态一旦改变就回一直保持下去then返回值1.如果返回的是promise类型,原创 2021-06-24 15:03:38 · 695 阅读 · 0 评论 -
generator函数
概述generator是异步编程的一种解决办法本质上是一类特殊的函数,在function和函数之间有个*,内部通过yeid关键字定义不同状态;直接调用Generator函数,不会执行,而是返回一个指向内部状态的指针对象调用next方法可以使指针移动到下一个状态(每次调用next方法,内部指针就从函数头部或上一次停下来的地方开始执行,直到遇到下一个yield表达式(或return语句)为止。)generator函数与普通函数的区别1.在function和函数之间有个*,内部通过yeid原创 2021-06-24 12:29:21 · 130 阅读 · 0 评论 -
JS的EventLoop
JS是单线程语言,但倘若只有同步模式,遇到耗时操作,页面便会阻塞,就像接口请求不到数据,或者图片未加载完成,页面就卡住一直等待。这样显然不现实也不实用。所以异步模式应运而生。EventLoopJS的任务可以分为同步任务和异步任务运行时,遇到同步任务,会根据执行顺序将同步任务加入执行栈中运行遇到异步任务,会将异步任务移入事件注册表(event Table)注册函数注册完成后将回调函数放入事件队列中(event Queue)同步任务执行完毕后,会依次将事件队列中回调函数加入执行栈运行原创 2021-06-23 20:55:59 · 136 阅读 · 0 评论 -
手写AJAX
function myAjax1({ url, type, data, datatype }) { return new Promise((resolve, reject) => { // new let xhr = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject('Microsoft.XMLHttp'); // responseText xhr.on.原创 2021-06-22 19:58:12 · 115 阅读 · 0 评论 -
防抖和节流
防抖多次触发事件只会产生一次function debounce(fn, wait) { var timer = null; return function() { var context = this; var args = arguments; if (timer) { clearTimeout(timer); timer = null; } ti原创 2021-06-22 14:43:49 · 110 阅读 · 0 评论 -
箭头函数和普通函数的区别
1.普通函数的this指向其直接调用者,箭头函数的this指向定义时所在对象,且不能通过apply、call、bind改变this指向2.箭头函数不能作为构造函数,不能使用new关键字3.箭头函数不绑定arguments,要用rest参数代替4.箭头函数不具有prototype原型5.箭头函数不具有super6.箭头函数不能当做Generator函数,不能使用yield关键字。...原创 2021-06-22 10:00:46 · 108 阅读 · 0 评论 -
JS跨域解决方法
js中的同源策略使得我们不能直接请求不同域上的数据,跨域就是通过js在不同的域之间进行数据传输或通信。只要协议、域名、端口有任何一个不同,都被当作是不同的域。原创 2021-06-20 10:54:20 · 267 阅读 · 0 评论 -
JS多种继承方法
1.原型链继承将父类的实例作为子类的原型Dog.prototype = new Animal(); //将Animal的实例挂载到了Dog的原型链上//或:Dog.prototype = Object.create(Animal.prototype)原创 2021-06-20 10:05:26 · 941 阅读 · 0 评论 -
ES6新特性
1.声明变量的关键字let const2.数据结构set map3.异步操作对象promise4.基本数据类型symbol5.原创 2021-06-19 21:28:29 · 86 阅读 · 0 评论 -
Js数组去重九种方法
// set方法function unique1(arr) { return [...new Set(arr)]}// indexOf方法function unique2(arr) { let res = []; for (let i = 0; i < arr.length; i++) { let temp = arr[i]; if (res.indexOf(temp) > -1) { arr.splic.原创 2021-06-08 19:21:14 · 96 阅读 · 0 评论 -
JS中的原型链
构造函数:Person实例对象:Zhangsan构造函数可以通过new的方式得到实例原创 2021-05-28 21:15:57 · 70 阅读 · 0 评论 -
JS的垃圾回收机制
定义:在javascript中,每隔一段时间,执行环境会自动清除一些没有用的变量,以此释放内容。原创 2021-05-28 21:01:19 · 166 阅读 · 0 评论 -
闭包的优缺点
定义:函数A返回了一个函数B,函数B中使用了函数A的变量,且函数B在外部环境中执行,就产生了一个闭包优点:1.原创 2021-05-28 20:37:04 · 3664 阅读 · 0 评论 -
Js内置数据类型
JS内置类型JS中共有七种内置数据类型基本数据类型:null、undefined、boolean、string、number、symbol引用数据类型:object(function、regexp、array、date)注:1.Js中的数字类型是浮点型,不是整型2.NaN属于数字类型主要区别:存储位置不同。1.基本数据类型存储在栈中,占据空间小,大小固定,可以被频繁使用;2.引用数据类型存储在堆中,栈中存放指针,指针指向堆中该实体的起始地址,占据空间大,大小不固定,不适合被频繁使用。ty原创 2021-05-19 17:38:12 · 491 阅读 · 0 评论 -
JS中为什么0.1+0.2不等于0.3
0.1+0.2!=0.3原因精度丢失原因解决办法原因当计算机计算0.1+0.2时会先将0.1、0.2转换为二进制,这两个数的二进制都是无限循环小数,由于数据存储大小的限制会将超出的位数截取掉,因此造成精度丢失。精度丢失原因1.转化为二进制导致精度丢失JS中存储数字是以64位双精度格式存储,共有53位有效数字,再进行二进制转换时超出52位的部分将被截取掉。2.阶码对齐导致精度丢失阶码对齐指的是小数点位置对齐,对齐之后超过有效位数的部分会被截取。3.相加运算导致精度丢失阶码对齐之后进行相加操作原创 2021-04-07 16:14:20 · 670 阅读 · 1 评论