
js
浅听记忆2
这个作者很懒,什么都没留下…
展开
-
知识点汇总
块元素弹性布局:flex定位:父元素position:relative1、绝对定位 + transform,translateX(-100px) translateY(-100px);2、绝对定位 + margin;3、绝对定位 + calc;grid:和flex一样table行内元素vuevue2:缺点:1、无法监听数组的变化,所以在vue底层改写了数组的几种原生方法2、不能监听没有定义的属性3、删除对象属性和添加无法响应式,需要借助$setvue3:相比vue2优点:1、可以监听整个原创 2022-06-28 19:11:55 · 285 阅读 · 1 评论 -
DOM、CSS渲染解析过程
DOM解析过程如下为dom的解析图解解析的过程具体为:网络进程接收响应头(content-type),根据该字段来判定文件类型,假设值为‘text/html’为该请求创建渲染进程,并与网络进程建立数据通道,网络进程接收到的数据通过数据通道传递给渲染进程进而读取数据渲染进程读取的数据交给HTMLparser(渲染引擎内部模块)解析,解析器会动态接收字节流,将其解析为DOM字节流转化为DOM通过分词器(类似词法解析)将字节流转化为token(tag Token和文本Token)由图可转载 2022-03-02 17:10:26 · 1454 阅读 · 0 评论 -
setState是同步还是异步
关于setState附上官网地址一份setState描述其实探讨是否是同步还是异步这个问题很好理解能紧随其后拿到结果的可以认为同步(简单理解哈,一些场景暂不考虑,当然有一些属于异步的但是异步任务刚好都结束了,直接拿到了对应的结果)...原创 2021-09-03 10:43:32 · 3234 阅读 · 0 评论 -
promise的运用和实现
话不多说先贴上es6规范地址:ES6promise规范先来看看promise的定义:Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样原创 2021-07-08 16:26:07 · 111 阅读 · 0 评论 -
webpack开发loader和plugins
现如今webpack作为前端不可或缺的打包工具之一,它具有非常强大的功能,也需要我们慢慢开发,实际中我们涉及到的基本如下:配置项配置(loader、plugins)开发属于自己需求的loader或者plugins对于loader它其实更像是一个转换器,将我们拿到的资源经过我们特定的转换输出到外部使用,我们开发模板也比较简单,只是功能因项目而异:下面我简单将拿到的资源中的border实线换成虚线,简易的,没有做过多匹配关系test-loader/index.js:// 引入这个包是为了我们拿到原创 2021-06-04 18:29:31 · 174 阅读 · 0 评论 -
手动实现map
定义和用法map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。map() 方法按照原始数组元素顺序依次处理元素。注意: map() 不会对空数组进行检测。注意: map() 不会改变原始数组。要明白一个方法的实现,必须了解它的用法,才能一步一步去实现:map作为我们循环数组常用的方法之一,以下是其特性:它return有返回值出来拥有两个参数:function(回调函数)和 thisValue(传递给回调函数的对象)不会改变原数组接下来我们来实现这么个东西.原创 2021-06-04 17:56:56 · 556 阅读 · 0 评论 -
闭包 执行上下文 作用域链
闭包的概念总的来讲可以概括为:内层函数实现了一个对外部变量的引用,将外部变量长久的保存了下来通俗的讲闭包其实就是一个可以访问其他函数内部变量的函数。即一个定义在函数内部的函数,或者直接说闭包是个内嵌函数也可以。红宝书闭包的定义:闭包是指有权访问另外一个函数作用域中的变量的函数。MDN:一个函数和对其周围状态的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。相关概念:执行上下文,作用域链执行上下文:(原创 2021-05-31 17:32:19 · 213 阅读 · 0 评论 -
webpack js兼容性处理
目前最新的代码规范很多都不能直接被浏览器识别访问,而借助webpack我们可以使用babel对js进行转换,将其变成浏览器可识别的代码其中就有个loader:babel-loader 而跟他一起使用的或者有依赖关系的还有其他的 @babel/core @babel/preset-env @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators 所以我们需要安装这些包cnpm i babel-loade...原创 2021-05-21 10:52:01 · 618 阅读 · 0 评论 -
webpack配置之postcss-loader和postcss-preset-env
在我们打包css的时候难免会遇到css的兼容性问题此时webpack提供了postcss-loader和对应插件postcss-preset-env而这两个东西的使用在webpack4和webpack5有些许不同 rules: [{ test: /\.css$/, use: [ // 'style-loader', \ // 取代原创 2021-05-20 18:44:08 · 4424 阅读 · 1 评论 -
vue源码之$on,$emit,$off
1.$emit$emit在vue中担当一个传递事件的角色,它将我们传递的事件派发到vm的事件系统中(vm._events),统一去管理派发的事件,源码如下Vue.prototype.$emit = function (event) { var vm = this; { var lowerCaseEvent = event.toLowerCase(); if (lowerCaseEvent !== event && vm._ev原创 2021-04-09 17:24:01 · 749 阅读 · 0 评论 -
盒模型
盒模型分为标准模型和IE模型标准的宽包括设置的padding+border+content(依随content往外扩)box-sizing:content-box而IE模型例如设置了宽100,padding20,border5,其实他的内容区content只有50宽,这个模型下面的合资宽就是设置的宽度(依随content往内挤)box-sizing:border-box...原创 2020-11-26 00:02:15 · 122 阅读 · 0 评论 -
下拉选项太多,导致输入框响应很慢,延迟久
方案就是把所有的数据请求出来,利用下拉滚动条去二次添加数据,例如首次只展示100条,等下拉到底部时将接着的100条push到对应下拉展示的数组里// 目标事件是onPopupScrollthis.state={ pageIndex:1, // 第一页加载的 pageSize: 100, // 加载的数据间隔大小 scrollPage: 1, // 滚动的是第几次 keyWords:'', // 搜索的关键字 optionData:[], //原创 2020-10-22 14:35:27 · 972 阅读 · 0 评论 -
行为验证,极验二次验证
(function (global, factory) { "use strict"; if (typeof module === "object" && typeof module.exports === "object") { // CommonJS module.exports = global.document ? factory(global, true) : function (w).原创 2020-09-02 11:55:38 · 888 阅读 · 0 评论 -
call和apply实现原理
call:它的作用是改变调用者的this指向到指定的对象上面,并将调用者执行之后返回给自己var person = { fullName: function(city, country) { return this.firstName + " " + this.lastName + "," + city + "," + country; }}var person1 = { firstName:"Bill", lastName: "Gates"}person.fullNa原创 2020-08-27 14:46:26 · 858 阅读 · 0 评论 -
Object和Function
1. 首先Object和Function都是构造函数,而所有的构造函数的都是Function的实例对象. 因此Object是Function的实例对象2.Function.prototype是Object的实例对象3. 实例对象的原型(我们以__proto__来表示)会指向其构造函数的prototype属性, 因此 Object.__proto__ === Function.prototype, Function.__proto__ === Function.prototype, Function.p.原创 2020-08-24 14:24:37 · 1637 阅读 · 3 评论 -
IE兼容问题整理
1.后台返回的Blob文件流格式在ie和谷歌是不一样的: 谷歌的可能是 { size:74, type:"application/json" }, 而IE的是 { size:74, type:"application/json;charset=UTF-8" }2.下载文件需要判定是否是IE//下载文件export function dow...原创 2020-06-17 17:40:41 · 908 阅读 · 0 评论 -
IE请求兼容性问题
IE请求路径中无法识别中文字符,需要将参数进行转码const requestbody = encodeURI(`/bid/bond/updateInvestor?investorId=${baseId}&createUser=${12}&investorFullName1=${investorFullName}&investorSimpleName1=${investorSimpleName}&investorType=${investorType}&conta原创 2020-06-17 15:14:00 · 239 阅读 · 0 评论 -
IE下载或者导出不兼容问题处理
//下载文件export function downloadPDF(data, name = 'file.docx') { if (!data) { return } var blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8', }) if (isIE()) { window.原创 2020-06-17 11:36:53 · 391 阅读 · 0 评论 -
js比较时间的大小
parseTime(time){ let time1='' if(time){ time1 = time.replace("-","/"); } return time1}let start = '2020-06-11 16:18:10 'let end = '2020-06-11 16:18:10 'let time = parseTime(start)let end = parseTime(end)对比大小即可其他格式的可转换格式可.原创 2020-06-11 16:21:47 · 604 阅读 · 0 评论 -
截取url上面的参数
getUrl(url) { var result = []; var query = url.split("?")[1]; var queryArr = query.split("&"); queryArr.forEach(function(item) { var obj = {}; var value = item.split("=")[1]; var ...原创 2020-05-18 14:40:15 · 243 阅读 · 0 评论 -
v8引擎内存回收
v8引擎的内存设置上限原因在于JavaScript在回收垃圾的时候会中断任务的执行,回收100M的大致需要3毫秒,如果这个内存不设置大小的话,JavaScript一直去使用这些内存,存在大量回收的时候可能中断整个程序的执行,这肯定不是我们想要的在浏览器中,它会时刻的检测你的内存使用情况,在你的内存接近满的时候,它会去查看有哪些变量是没用的可以回收的,直到实在没有可回收的引起内存问题的几个常...原创 2020-04-24 16:34:56 · 152 阅读 · 0 评论 -
事件的执行机制 事件循环
js代码的执行都是有顺序结构的,先执行同步任务在执行异步任务;而异步任务又分为宏任务和微任务;宏任务:setTimeout setInterval I/O script微任务:promise.then() process.nextTick例如以下代码:setTimeout(_ => console.log(4))new Promise(resolve =...原创 2020-04-24 15:24:20 · 618 阅读 · 0 评论 -
数组方法
数组的方法很多,像什么every():检测数组的每个元素是否都符合条件;some():检测数组元素中是否有元素符合指定条件;filter():检测数组元素,并返回符合一傲剑的所有元素的数组;map():通过指定函数处理数组的每个元素,并返回新数组。let arr = [1,2,3,4,5,6,7];let everyFor = arr.every( (item)=&...原创 2020-04-13 13:53:10 · 159 阅读 · 0 评论 -
ie下new Date(2020-02-02 12:12:12)类型的时间出现Invalid Date
let time = record.filingTimeEnd;time = time.replace(/-/g,':').replace(' ',':');time = time.split(':');let time1 = `${time[0]}/${time[1]-1}/${time[3]} ${time[3]}:${time[4]}`let newTimer = new Dat...原创 2020-04-13 11:25:18 · 1420 阅读 · 0 评论 -
如何判断一个对象里面的属性值都为空
const applyData = { name:'', age:''}let result = !Object.values(report).every(item => item === '');console.log(result) //false原创 2019-11-21 10:16:42 · 3682 阅读 · 0 评论 -
事件循环机制
事件循环机制无非就是一直在检查事件队列中是否为空,其大概步骤如下: 1. 检查事件队列是否为空,如果为空,则继续检查;如不为空,则执行 2; 2. 取出事件队列的首部,压入执行栈; 3. 执行任务; 4. 检查执行栈,如果执行栈为空,则跳回第 1 步;如不为空,则继续检查;...原创 2019-01-12 15:13:29 · 169 阅读 · 0 评论 -
懒加载
原理:就是将img标签的src路径设置为同一张图片,并为其设置一个data-src自定义属性存储对应图片的真正路径,监听图片的元素是否滚动到可视区域,如果到达的话就在js里面获取自定义属性并将它赋给图片元素的src属性上,从而达到懒加载的效果。...原创 2018-03-27 11:52:13 · 177 阅读 · 0 评论 -
获取上传图片,并展示在页面上
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> </head> <body> <div id="upload" style=&原创 2019-02-28 11:08:08 · 405 阅读 · 0 评论 -
日期格式化
// 格式化时间formatTen(num) { return num > 9 ? (num + "") : ("0" + num); },formatDate(date) { var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDa...原创 2019-05-16 11:21:16 · 130 阅读 · 0 评论 -
js转为json对象
// 这个this.type.processParams是获取到的js字符串数据,下面方法将其转化为json对象this.paramsList = eval("(" + this.type.processParams+ ")");避免Unexpected token u in JSON at position 0" 这种报错出现或者下面这种new function的方式...原创 2019-05-17 11:54:29 · 208 阅读 · 0 评论 -
生成时间戳
// 第一种Date.parse(new Date()) // 将毫秒变为000// 第二种new Date().getTime()// 第三种(new Date()).valueOf()有时候需要知道自己是在哪个时刻添加的东西,这时候就可以使用了...原创 2019-05-22 17:15:11 · 1020 阅读 · 0 评论 -
深拷贝和浅拷贝
浅拷贝:1. 对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。2. 对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际...原创 2019-05-31 11:27:26 · 129 阅读 · 0 评论 -
四舍五入保留指定位数的小数点
let num = 12.232424let newNum = num.toFixed(2) // 保留两位小数console.log(newNum) // 12.23原创 2019-06-13 11:37:28 · 1389 阅读 · 0 评论 -
数组格式转换
// 将["1","2","3"]这种数组转化成数值类型[1,2,3]var str = ["1","2","3"]str.map(Number)原创 2019-06-18 18:26:42 · 1156 阅读 · 0 评论 -
url重定向
//获取域名window.location.origin//拼接url地址let url = window.location.origin + '域名后面的路径';//路径跳转 window.location.href = url;原创 2018-11-07 09:52:14 · 818 阅读 · 0 评论