JavaScript
SanOrintea
这个作者很懒,什么都没留下…
展开
-
js全端支持的深拷贝structuredClone
经过一年半的试用,structuredClone转正了,全端可以正式使用。原创 2023-07-31 10:18:43 · 392 阅读 · 0 评论 -
JS 字符串底层原理
js 字符串底层原理原创 2022-07-09 11:31:03 · 389 阅读 · 0 评论 -
js分发模式 不用if
分发模式原创 2022-06-14 11:13:29 · 235 阅读 · 0 评论 -
js 求一个月以前的时间
function getLastMonth(date) { const now = new Date(date) const year = now.getFullYear(); const month = now.getMonth() + 1; // 0-11表示1-12月 const day = now.getDate(); const nowMonthDay = new Date(year, month, 0).getDate(); // 当前月的总天数 let res = null i原创 2022-04-25 15:10:56 · 2028 阅读 · 2 评论 -
uniapp中echart (renderjs)的tooltip.formatter失效
uniapp echart renderjs tooltip formatter 失效原创 2022-02-18 11:09:28 · 2795 阅读 · 1 评论 -
vue 自动匹配table导出为excel 组件(内无excel方法)
<template> <el-button @click="exportExcel" type="primary" icon="icon-daochu">导出</el-button></template><script>import {postExcelFile} from '@/utils/public_func'export default { props: { refName: {原创 2022-01-26 09:39:56 · 149 阅读 · 0 评论 -
BigInt 和 这种特殊数字类型转字符串
可以用在一个整数字面量后面加 n 的方式定义一个 BigIntBigInt(1234) // 1234n1234n + 1n = 1235n1235n + ‘’ // ‘1235’原创 2022-01-14 14:06:02 · 906 阅读 · 0 评论 -
Promise学习笔记
Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了//promise的执行顺序:先main,then压入微任务管道let promise = new Promise((resolve, reject) => { console.log('Promi.原创 2021-11-30 14:21:20 · 424 阅读 · 0 评论 -
JS 闭包
「函数」和「函数内部能访问到的变量」的总和,就是一个闭包(Closure)。有些人看到「闭包」这个名字,就一定觉得要用什么包起来才行。其实这是翻译问题,闭包的原文是 Closure,跟「包」没有任何关系。transitive closure 类上执行传递性关闭ring closure 闭环Lexical Closure 词法闭包Force Closure 力封闭 ; 力锁合contact closure 触点闭合Function Closure 函数闭包horizon closure 水平.原创 2021-11-26 15:36:46 · 124 阅读 · 0 评论 -
JS(ES6)如何优雅的把后台JSON数据存到前端
async fetchData (id) { const params = { idNumber:id } // 构造parms const res = await this.$http(xxxxxxxxxxxxxxxxxxxxxxxxx) // 走接口,存到res const {data, success, message} = res.data // 解构出res中的数据,后面用 if (!success) { // 错误情况处理,错了就return出去原创 2021-11-13 11:38:41 · 1415 阅读 · 0 评论 -
三种全局部署方法实现防抖
//文件:api/http.jsimport axios from 'axios' axios.defaults.timeout = 5000; //响应时间axios.defaults.baseURL = 'http://localhost:3000'; //配置接口地址let reqList = []/** * 阻止重复请求 * @param {array} reqList - 请求缓存列表 * @param {string} ur原创 2021-11-09 17:33:22 · 2154 阅读 · 4 评论 -
分页表格删除数据后保留当前页
分页表格删除数据后保留当前页的代码:const totalPage = Math.ceil((this.page.pageTotal - 1) / this.page.pageLimit)this.page.pageIndex = this.page.pageIndex > totalPage ? totalPage : this.page.pageIndexthis.page.pageIndex = this.page.pageIndex < 1 ? 1 : this.page.page原创 2021-11-09 13:08:37 · 253 阅读 · 0 评论 -
JS运行原理,宏任务微任务的任务loop驱动模式
要拎清运行原理,就要知道js有什么无理限制和主要解决什么问题首先,js是单线程的,不能开辟多线程。这决定了它支持并发,不支持并行「并发」强调的是可以一起「出『发』」,「并行」强调的是可以一起「执『行』」你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。既然能并发,解决通信问题的时候就可以利用异步充分利用等待时间原创 2021-11-05 10:55:52 · 166 阅读 · 0 评论 -
解构等ES6用法
https://juejin.cn/post/7016520448204603423原创 2021-11-04 08:25:50 · 116 阅读 · 0 评论 -
正则表达式匹配第二此出现的a
以前有个需求,输入框内只能输入0-9和小数点,小数点只能输入一次。当时的思路是:用户输入一个非数字,就给这个数字干掉,就相当于没输入;同理,用户输入第二个小数点,就给第二个小数点干掉。但是由于以下3个原因没使用:1最好不要在无提示的情况下修改用户输入2vue的绑定刷新机制,如果长按,就会疯狂输入,此时不能去除3不会匹配第二次出现的小数点。今天闲着无聊吧正则又看了下,这里干掉了第三点。"caanady".replace("caanady,".match(/[^a]*a[^a]*/g)[2],'')原创 2021-10-27 15:35:09 · 4284 阅读 · 0 评论 -
JS统计字符串中某字符的数目
let sum = 0; for (let i = 0; i < "xaxxaaxxxxaxxaax".split("").length; i++) { if("xaxxaaxxxxaxxaax".split("")[i]=="a")sum++; };"xxaxxxaxaaxxa".replace(/a/g,"").length;"xaxxxaxxxaxaxxx".split('a').length - 1;原创 2021-10-27 13:31:08 · 4158 阅读 · 0 评论 -
全局防止监听事件重复添加
情景:每次echart图都加了个监听,浏览器缩放,改变echart大小。这时候每次重新画图都会发起新的监听。从而导致监听越来越多。window._addEventListener = window.addEventListener//为了接管事件的同时保证出入参不变,复制一份(复制指针地址不同)const func = new Map()window.addEventListener = (a, b, c) => { if (a !== 'resize') return window._ad原创 2021-10-21 13:57:44 · 741 阅读 · 0 评论 -
缩放浏览器后切换路由导致echart不能显示
当打开一个页面时候,页面中有几个echart图,宽高是根据百分比确定的。这时候切到另一个页面,再缩放浏览器,再切回初始页面,会导致echart图显示不出。这是因为vue中路由切换是有内置组件keep-live,保存了当前页面的属性,相当于给这个页面设置了display:none,当切换再切回去时候,保存的图的属性和当前浏览器大小不匹配,就认为这个图没被加载过,它的的宽高都是0了。解决方案:单个解决:在每页中加个生命周期:activated(){xxxxx.resize()}//找到图的dom元素的名字原创 2021-10-21 13:42:55 · 789 阅读 · 1 评论 -
时间选择器,起始时间结束时间控制
在两个datapickek中加属性:picker-options="startTime"和`:picker-options=“endTime”在datareturn中加 startTime: { disabledDate: time => { if (this.dataForm1.endTime) { return time.getTime() > new Date(this.dataForm1.endTime).getTime原创 2021-10-07 10:45:25 · 407 阅读 · 0 评论 -
js手动实现哈希表
js中有哈希表 var map1=new Map() map1.has(a) map1.set(b,1) map1.get(c) 用对象手动构造一个和上面一样功能的哈希表let hash = {};if (hash[a] !== undefined) {}hash[b] = 1;hash[c]利用了对象用中括号取属性名的特性,不是数组!...原创 2021-10-05 08:52:07 · 160 阅读 · 0 评论 -
后台请求返回值的处理
后台请求来数据以后,处理值的时候需要分成功情况和异常情况。这时候应该先处理异常情况,把异常情况全部处理掉以后,剩下都是正常情况了,再用.length啥的就都是有值的,就不用一步步处理异常const {data, success} = res if (!success || !data.length ) { this.appname = `您的企业暂无应用` JHSession.sessionSetObject(JHSession.KEY原创 2021-09-29 10:20:03 · 307 阅读 · 0 评论 -
js操作数组的函数 更改的都是地址 的坑
js操作数组的函数,arr.splice(),arr.push()这种,操作的都是地址,举个栗子let c =[1]let arr = c //这时候arr = [1]c.push(2) //这时候arr = [1,2]//第三行没改动arr,却改动了arr。//这是因为arr中存放的是c的地址,而第三行中的js操作,改了c所在地址中的值,所以arr引用了c的地址,就跟着变了//如果是第三行改为c=[1,2],就会新建一个地址存12,然后把这个地址给c,而c原来的地址没被销毁掉,因此arr访问原创 2021-09-27 09:31:04 · 425 阅读 · 1 评论 -
数组对象数据处理
如果数据是:var books = [ {id:'1',name:'JAVA',author:'s0nei',price:6}, {id:'2',name:'HTML',author:'d1iber',price:7}, {id:'3',name:'JS',author:'j1lion',price:8}, {id:'4',name:'C',author:'s0nei',price:9}]//转化成var books = [ ['1','2','3','4'], ['JAVA','HTM原创 2021-09-25 15:10:41 · 337 阅读 · 0 评论 -
方法分发管理与异步 与 async await 的运用情景
前置:1.map foreach2async await场景是这样的:一个页面,有6个echart,都可以点击进去看详情。(6个图接口,6个详细图接口)如果用垃圾写法就是:写12个方法高级一点:用flag标示出进的是哪个图的,然后switch case 1 2 3 。。。再好一点的写法:方法分发管理在data中保存一个对象,这个对象有6个属性,属性值分别为6个方法echartsObj: { f1: (e = 'f1') => this.initF1(e),原创 2021-09-24 16:13:57 · 210 阅读 · 0 评论 -
文件上传改文件名
element ui的文件上传器是uploader,他里面存的文件打印下来的标准格式是;红色:需要传输的内容form绿色:uploader蓝色:uploader【0】黄色:uploader【0】中的文件部分(raw),如果需要改文件名,就是改raw中的name但是这个file类型的保存方式只可读,不可写。于是我们新建一个文件格式重新保存这个文件就可以了,只是保的时候偷偷改一下他的文件名,代码如下:if (this.dataForm.file[0].raw !== undefined) {原创 2021-09-22 09:50:41 · 906 阅读 · 0 评论 -
前端传文件的方法
传文件的时候是以二进制流的形式进行传输的,然而网页中暂存的时候不是以二进制流保存的。因此我们需要构造一个二进制流。如下:let params = new FormData() params.append(`name`, this.dataForm.name) params.append(`type`, this.dataForm.type) params.append(`xxx`, this.dataForm.xxx) pa原创 2021-09-22 09:42:46 · 831 阅读 · 0 评论 -
js es6的 一步数组去重
newarr = [...new Set(arr)]原创 2021-09-09 08:44:03 · 90 阅读 · 0 评论 -
js数字数组排序
// var arr = ["s","Y","a","A","o","P"];// console.log(arr.sort());// 可以修改sort排序,以便于为数字进行快速排序var arr2 = [12,3,56,78,45,24];// console.log(arr2.sort());//[12, 24, 3, 45, 56, 78] arr2.sort(function(a,b){ return a- b; });// 升序排列console.原创 2021-09-06 17:00:35 · 263 阅读 · 0 评论 -
vue中数组一样但是 比较过后显示不一样
如果简单地将两个数组 a===b 显示false这时候加上JSON.stringify()即可if(JSON.stringify(a)===JSON.stringify(b)){}原创 2021-08-25 17:01:46 · 563 阅读 · 0 评论 -
.foreach() .map() .filter() .reduce() .find()在二维对象/数组中的作用
首先理解二维数组/对象指什么var books = [ {id:'1',name:'JAVA',author:'s0nei',price:6}, {id:'2',name:'HTML',author:'d1iber',price:7}, {id:'3',name:'JS',author:'j1lion',price:8}, {id:'4',name:'C',author:'s0nei',price:9}]目标1:得到所有id的值取出数组对象中对象的值var res = []books.原创 2021-08-25 16:42:34 · 145 阅读 · 0 评论 -
ES6 ... 扩展操作符 和 Object() 在一维数组/对象中的应用
对象、数组 的属性合并常用与构造parmsconst page={pagelimit:20, pagenumber:2,}const searchform = { keyword:"key", startDate:"2020-1-1", endDate:"2021-1-1",}const parms = {...page,...searchform}//parms={// pagelimit:20, pagenumber:2,keyword:"key"; // star原创 2021-08-25 10:02:46 · 159 阅读 · 0 评论 -
对象中Object.defineProperty()和proxy区别
首先要知道对象的一些基本属性打比方,现在有一个person对象,这个人想去改名,那他的名字就是可以变化的。但是无论怎么操作,他的身份证号都不会改。因此,有必要规定对象的词条中的内容能否被改变。除此以外,还有许多规定的基本属性,对应着这些对象应该怎么被操作。Object.defineProperty的作用我们定义对象的时候这之中,对象的词条的基本属性都是默认的,假如我以后想改名,可以,甚至我想把这个词条删掉,也可以。因此,如果用Object.defineProperty,就可以在操作对象的时候,连带原创 2021-08-19 14:15:46 · 707 阅读 · 0 评论 -
表单修改后退出,表格数据变化
原始情况:表单修改后退出,表格数据变化 openeditDialog(){ if(JSON.stringify(this.currentrow) != "{}"){ this.form = this.currentrow//11111111111111 this.editvisiable = true }else{ this.$message('请选择一条数据') } },在1中,form=currentrow原创 2021-05-31 15:59:38 · 233 阅读 · 0 评论 -
javascript map 哈希表
哈希表本质就是一个二维数组,只不过这个二维数组里的第一列的数据不能重复。比如记录一句话中,每个字母出现的次数。 var s="abcdeee" var arr=s.split('') //.map方法只能作用于数组[a,b,c,d,e,e,e] var map=new Map() //定义哈希表map arr.map((key,index,arr)=>{ //数组的.map方法,循环遍历整个数组,同for i原创 2021-05-26 15:10:49 · 1098 阅读 · 3 评论 -
JavaScript基础教程第8版-例1-Bingo卡片游戏
1基础工作 <h1>Create A Bingo Card</h1> <table> <tr> <th>B</th> <th>I</th> <th>N</th> <th>G</th> <th>O</th>原创 2021-05-06 16:56:25 · 994 阅读 · 0 评论 -
javascript 时间戳
<template> <div> <button @click="onClick">GET</button> {{p1}}<br>{{p2}}<br>{{p3}}<br>{{p4}}<br>{{p5}}<br>{{p6}} </div></template><script>export default {原创 2021-04-12 14:19:10 · 244 阅读 · 0 评论