因为微信 公众号上有这样一个机制,使用版本好的话,有时做不到及时刷新,所以就用了vue.js,因为它有这样的功能就是如果某个文件里面的数据改变了,那么vue.js就会把这个文件的名字也相应的改掉,所以缓存里面的东西...以前没有总结过js关于清除浏览器缓存的方法,今天就借此总结一下吧。 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能。...但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据。像股票类网站实时更新等,这样的网站是不要缓存的,像有的网站很少更新,有缓存还是比较好的。今天主要介绍清除缓存的几种方法。...清理网站缓存的几种方法 meta方法 // CONTENT="no-cache" 清除缓存...cache只有GET方式的时候有效。 方法三:用随机数,随机数也是避免缓存的一种很不错的方法! URL 参数后加上 "?
// 方法1 对象直接量 var obj1 = { v1 : "", get_v1 : function() { return this.v1; }, set_v1...: function(v) { this.v1 = v; } }; // 方法2 定义函数对象 var Obj = function() { var v1 = ""...{ return this.v1; }; this.set_v1 = function(v) { this.v1 = v; } }; // 方法...function() { return this.v1; }, set_v1 : function(v) { this.v1 = v; } }; // 方法
1、冒泡排序 以从小到大排序为例,冒泡排序的原理就是通过两层循环把数组中两两相邻的元素进行比较,是的大的元素放到后边,元素交换位置,从而一步步的交换元素的位置,使得最大的元素放到数组的末尾,这样内部的循环就进行了一轮...,再根据外部的循环依次再把次大一点的元素放到数组的末尾,从而实现数组的逐步排序。...基本原理就是先找到数组中的中间那个元素的索引,如果数组长度是双数,那么就默认向上取值,也就是默认取数组长度/2+1位索引,在根据索引去的数组中间的值,然后创建两个空数组,用来放置比该元素小的值和比该元素大的值...,在循环数组进行判断,如果数组的元素小于该中间位置元素的值,就放到左边数组,反之放到右边的数组,在函数中返回值设置为左边数组+中间的值+右边数组的拼接新数组,然后再根据递归对左边和右边的数组分别进行刚才的操作...]; arr[j] = tmp; } } } console.log(arr);//[0, 1, 7, 9, 14, 82] 选择排序也是运用中间变量的方法进行了数组元素位置的变换
for 最简单的一种循环遍历方法,也是使用频率最高的一种,可优化 循环过程中支持修改索引(修改 i) var arr = [1, 2, 3, 4, 5, 6] for(var i =...0; i < arr.length; i++) { console.log(arr[i]) } // 1 2 3 4 5 6 优化:使用临时变量,将长度缓存起来,避免重复获取数组长度...数组里的元素个数有几个,该方法里的回调就会执行几次 2. 第一个参数是数组里的元素,第二个参数为数组里元素的索引,第三个参数则是它自己(利用第三个参数可以进行数组去重) 3....数组自带的遍历方法,foreach在循环次数未知或者计算起来较复杂的情况下效率比for循环高 4....循环的数组元素是基本数据类型,不会改变原数据的数据,循环的数组元素为对象,会改变原数组的对象属性的值 5.
1、使用递归(循环)的方式实现深拷贝 //使用递归的方式实现数组、对象的深拷贝 function deepClone1(obj) { //判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝...,对象的话进行对象拷贝 //进行深拷贝的不能为空,并且是对象或者是 if (obj && typeof obj === "object") { var objClone = Array.isArray...,提供了 lodash.cloneDeep()实现深拷贝 3、通过 JSON 对象实现深拷贝 //通过js的内置对象JSON来进行数组对象的深拷贝 function deepClone2(obj) {...objClone = JSON.parse(_obj); return objClone; } 4、Object.assign()拷贝(并不深,一级拷贝) 当对象中只有一级属性,没有二级属性的时候...,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。
); } ---- 二、实现继承的方法: 1.原型链继承 //核心:将父类的实例作为子类的原型 function Dog() { } Dog.prototype = new Animal()...,也是父类的实例 父类新增原型方法/原型属性,子类都能访问的到 简单 缺点 要想为子类新增属性和方法,必须要在new Animal()这样的语句之后执行,不能放到构造器中 无法实现继承多个 来自原型对象的所有属性被所有实例共享...,只是子类的实例 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现函数复用,每个子类都有父类实例函数的副本,影响性能 ---- 3.实例继承 //核心:为父类实例添加新特性,作为子类实例返回...,可以继承实例属性/方法,也可以继承原型属性/方法 既是子类的实例,也是父类的实例 不存在引用属性共享问题 函数可复用 可传参 缺点: 调用了俩次构造函数,生成了俩份实例(子类实例将子类原型上的那份屏蔽了...) ---- 6.寄生组合继承: //核心:通过寄生方式,砍掉父类的实例属性,这样,在调用俩次父类的构造的时候,就不会初始化俩次实例方法/属性,避免了组合继承的缺点。
( function(item){ console.log(item.id + '---' + item.name) }) 输出结果: 第三种: map()方法...,这个方法执行没有返回值,不影响原数组 2、map:支持return,相当与原数组克隆了一份,把克隆的每项改变了,也不影响原数组 第四种: for....in 方法 for....in 是es5标准..., 此方法遍历数组效率低,主要是用来循环遍历对象的属性 1)、 for......in 遍历数组 for(let item in arr){ console.log(arr[item...]) } 2)、for.....in 遍历对象 循环遍历对象的属性,js中动态获取key,得到某对象中相对应的value = obj[key] const obj = {...key in obj){ console.log(key + '---' + obj[key] ) } 输出结果: 第五种: for.......of 方法
random()" 前两个方法据说有时会失效,而第三种则是在跳转时传一个随机的参数! ...因为aspx的缓存是与参数相关的,如果参数不同就不会使用缓存,而会重新生成页面,每次都传一个随机的参数就可以避免使用缓存。...这个仅适用于asp&asp.net 5、window.location.replace("WebForm1.aspx"); 参数就是你要覆盖的页面,replace的原理就是用当前页面替换掉replace...参数指定的页面。 ...,而第五种则是使用跳转页面文件替换当前页面文件,并没有清空cache,也就是说Temporary Internet Files产生了相关的临时文件,两者搭配使用真是清空缓存,必备良药。
一、最简单方法(indexOf 方法) 实现思路:新建一个数组,遍历要去重的数组,当值不在新数组的时候(indexOf 为 -1)就加入该新数组中; function unique(arr){...(推荐使用) 实现思路: 1.创建一个新的数组存放结果 2.创建一个空对象 3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性...,并赋值为1,存入到第2步建立的对象中。 ...方法。...function unique(arr){ //Set数据结构,它类似于数组,其成员的值都是唯一的 return Array.from(new Set(arr)); // 利用Array.from将
// 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ function uniq(array){...return temp; } var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5]; console.log(uniq(aa)); /* * 速度最快, 占空间最多(空间换时间) * * 该方法执行的速度比其他任何方法都快...* 现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键, * 不是的话给对象新增该键并放入新数组。...* 注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”, * 不同的键可能会被误认为一样,例如n[val]-- n[1]、n["1"]; * 解决上述问题还是得调用“indexOf.../* * 推荐的方法 * * 方法的实现代码相当酷炫, * 实现思路:获取没重复的最右一值放入新数组。
大家好,又见面了,我是你们的朋友全栈君。 第一种:创建一个新数组使用reverse()的方法进行反转。...arr = [1,2,3,4] let arr1 = arr.reverse() console.log(arr1); //[4, 3, 2, 1] 第二种:利用数组循环,使用unshift() 方法将新项添加到数组的开头...,并返回新的长度。...unshift() 方法会改变数组的长度。...((element) => { arr3.unshift(element) }) console.log(arr3); //[4, 3, 2, 1] 第三种:使用反向循环数组的方法添加至一个新的数组
大家好,又见面了,我是你们的朋友全栈君。...例1:一个类直接实现数组求和 public class Add{ //主类 public static void main(String args[]) { //主方法...2:定义一个工具类,通过调用工具类实现数组求和(有返回值) class Array{ //工具类求和 public static int print(int b[]) { //静态方法...()直接调用工具类得到数组的和 } } 输出结果:10 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
1、用js setInterval 实现,每间隔一秒调用一次倒计时函数,在函数里面设置为0 时,取消定时器 倒计时 $(document).ready(function...clearInterval(interval); }; },1000); }); //总结:$("#time").html(i); 为元素赋值 2、用 js.../jquery.js"> 10 </script
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。...要解决跨域的问题,我们可以使用以下几种方法: 一、通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。...$.getJSON方法会自动判断是否跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。...的方法,让我们能通过js完全控制这个iframe,这样我们就可以让iframe去发送ajax请求,然后收到的数据我们也可以获得了。...结语: 除了以上几种方法外,还有flash、在服务器上设置代理页面等跨域方式,这里就不做介绍了。
数组去重是工作中常用的小技巧,一般的方法此处也不列举了,还是有很多的,如双层循环判断是否相等,或新建数组比较再push等等,需要注意的是,使用splice方法移除元素时,有可能会导致数组塌陷问题,需要处理一下...该方法遍历数组,查找有无对应元素并返回元素第一次出现的索引,未找到指定元素则返回 -1。...上述方法存在一定的性能问题,也就是说,基于splice实现删除性能不太好,当前项被删除后,随后每一项的索引都要向前移动一位,数据量较庞大时,一定会影响性能。...); 这里用到小技巧,如果出现重复值,则只有一个值满足条件,所以这方法还是蛮简洁的。...get方法读取key对应的键值,如果找不到key,返回undefined。 has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
看了构建高性能的web站点一书,对其中的集中web缓存进行一个总结 1 应用程序实现的动态页面缓存 应用程序把动态文件生成的html文件缓存到文件服务器,以后用户请求动态文件,直接从文件服务器加载对应的静态缓存的...但是会增加了缓存框架的加载和缓存查找的时间。 2 把解释执行的开发语言编译成为目标代码 这个主要把解释执行的高级语言,例如java,php直接编译成为平台相关的目标代码,汇编代码。...3 利用反向代理服务器的缓存 利用类似nginx的反向代理服务器,对请求的url对应的输出的进行缓存。这个缓存和应用程序实现的动态页面缓存类似,只不过用反向代理充当了应用程序的缓存实现。...(内容不返回)客户端则直接用本机缓存的内容缓存显示结果。...总结一下:1 一般的高并发的应用程序,都在web层采用了以上几种缓存,一般静态资源(图片,js,css)都会采用nginx反向代理+客户端缓存来实现。
截取字符串是我们在工作中十分常见的需求,像我这种记性差的,就总记不住那几个词,每次用到都得去百度,然后每次百度到的内容还都不一样,然后就百度到啥就用啥,一直也没有研究一下几种截取字符串的方法有啥区别。...于是今天就来自己总结一下几种截取字符串的方法,下一次再忘了看自己的总比再去搜强。...js提供的原生截取方法 首先需要强调的一件事就是,在js中,字符串一旦被创建,就永远无法修改,所以js提供的字符串相关的截取方法就不存在会影响原字符串的说法 slice 定义 slice() 方法可提取字符串的某个部分...substring 定义 substring() 方法用于提取字符串中介于两个指定下标之间的字符。...如果end大于start,substring则会调换两者的位置,从end截取到start substr 定义 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。
其实在之前的文章【缓存,确实很香,却也很受伤!】中,对缓存穿透的引发缘由及应对策略做过简要的描述。这篇文章将对这个问题再做下额外的扩展。...库负担大,效率太低; 基于缓存,存储已发布的所有新闻到缓存?成本太高,得不偿失。 新闻有时效价值,历史新闻价值极低,显然基于布隆过滤器的过滤是一个很好的选择。...1、控制查库的时机 a)缓存状态: 基于开篇提到的我们之前文章,我们知道,可以把每次缓存穿透入库查询不存在的数据存储一份状态到缓存,这样下次在查询的时候就可以直接在缓存层面拦截。...这是一个正常的解决方法,对于很多应用场景都很适用。但是对于我们上述列举的情景,这种方法会带来一些不可避免的隐患。...按照我们通常的认知,缓存好像都必须要有过期时间,一来是为了保障数据一致性(缓存数据与库数据),同时也是为了有效的控制缓存成本(热点数据存留)。
方法主要分为两大类 第一类:通过属性获取。 通过 document.getElementById("fash") 获取到p页签。 ?
领取专属 10元无门槛券
手把手带您无忧上云