js

js实现Set

烈酒焚心 提交于 2020-02-02 01:37:05
1 class MySet { 2 constructor(params) { 3 if (typeof params[Symbol.iterator] !== 'function') { 4 throw new TypeError('Set的参数不是一个可以迭代的对象') 5 } 6 this._data = [] 7 for (var item of params) { 8 this.add(item) 9 } 10 } 11 12 //添加元素 13 add(data) { 14 if(!this.has(data)) { 15 this._data.push(data) 16 } 17 } 18 //判断是否含有该元素 19 has (data) { 20 for (let index = 0; index < this._data.length; index++) { 21 const element = this._data[index]; 22 if(this.isEqual(element,data)) { 23 return true 24 } 25 } 26 return false 27 } 28 delete (data) { 29 for (let index = 0; index < this._data.length; index++) { 30

js setInterval定时器

落花浮王杯 提交于 2020-02-02 01:18:43
setInterval():定时器 回去重复执行某一功能 参数1:每次执行的具体任务,自定义 参数2:每次执行的间隔时间,单位毫秒 setTimeout():只执行一次的定时器 参数1:执行的具体时间, 参数2:间隔多久(延迟多久) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .box{ width: 200px; height: 200px; background-color: pink; line-height: 200px; text-align: center; font-size: 30px; } </style> </head> <body> <div class="box"></div> <script> box=document.getElementsByClassName("box")[0]; box.innerHTML = Math.floor(Math.random()

hackthebox注册教程

我与影子孤独终老i 提交于 2020-02-02 00:55:11
官方网址: https://www.hackthebox.eu/ hackthebox是一个靶场,听说和vulnhub很像,最近迷上了做靶场,于是就像去hackthebox看看,发现还是注册,而且注册好像还没有那么简单 在首页的最下面有个join,进行点击 发现需要邀请码,上网搜了搜,发现邀请码得靠自己获取,好吧,我接受这个挑战。 使用 view-source:https://www.hackthebox.eu/invite ,查看源代码 发现提示 发现可疑的js文件: /js/inviteapi.min.js inviteapi 邀请接口 查看该js 在控制台进行调用,给出了提示,有可能是base64编码也可能是ROT13编码 不管是什么编码,解密之后都是, 为了获得邀请码,使用POST方法,向下面的那个接口提交数据,我这里是使用火狐浏览器的hackbar插件,post提交数据 然后使用base64解密 得到邀请码 最后需要翻墙,完成一个谷歌的什么检测,类似验证码的东西,才可以正确注册。 来源: CSDN 作者: shy014 链接: https://blog.csdn.net/qq_32393893/article/details/104062615

性能优化-css,js的加载与执行

无人久伴 提交于 2020-02-01 22:09:10
前端性能优化 css,js的加载与执行 javascript是单线程的 一个网站在浏览器是如何进行渲染的呢? html页面加载渲染的过程 html渲染过程的一些特点 顺序执行,并发加载 词法分析 并发加载 并发上限 是否阻塞 依赖关系 引入方式 css阻塞 css head中阻塞页面的渲染 css阻塞js的执行 css不阻塞外部脚本的加载 js阻塞 直接引入的js阻塞页面的渲染 js不阻塞资源的加载 js顺序执行,阻塞后续js逻辑的执行 依赖关系 页面渲染依赖于css的加载 js的执行顺序的依赖关系 js逻辑对于DOM节点的依赖关系 js引入方式 直接引入 defer async 异步动态引入js 加载和执行的一些优点 css样式表置顶 用link代替import js脚本置地 合理使用js的异步加载能力 可以使用Chrome浏览器的performance工具分析页面的加载过程 来源: https://www.cnblogs.com/ygjzs/p/12250307.html

js算术运算符

蹲街弑〆低调 提交于 2020-02-01 21:17:51
1、创建变量(分两步) 1)声明变量 var a; 向系统申请一块内存 叫做a 2)定义变量 a=1; 向已经存在的变量赋值数字1 3)声明且定义 var b = 2; var a = null; 算术运算符 可以操作常量,也可以操作并保存变量 +加号: var a1 = 1+1; 变量是可以修改的,多次赋值,会覆盖上一次的值。每个变量只存一个,以最后操作的数据为准; 多次赋值要注意:赋值一定是声明过的变量;切记,每个变量只能声明一次。 a1=2+2; console.log(a1) 上述例子中,+号两边都是 Number类型的,运行加法 下述例子中,+号两边,任意一边是字符串类型,那么就运行拼接 +号拼接: a1=2+"2"; console.log(typeof a1); — 减号: 上述+号叫为特殊,会出现字符串拼接的情况,除了+号以外的运算符,都不会出现,都按照正常的数学运算来,即使运算符两边出现字符串,也按照数字类型来计算。 NaN:特殊标识符,表示该结果不是数字,它自身不等于自身 var a2=2-"a"; console.log(a2); *乘号: a2=5*3; /除号: a2=10/2; console.log(a2); %取余运算符: a2=45%8; console.log(a2); 复合算术运算符: +=加等于: a2=a2*4; var a3=a2*4;

JS的parent、opener、self对象

ぃ、小莉子 提交于 2020-02-01 19:38:49
转自http://blog.csdn.net/minsenwu/article/details/7455135 该变更永远指 分割窗口最高层次的浏览器窗口 。如果计划从分割窗口的最高层次开始执行命令,就可以用top变量。 parent: 该变量指的是 包含当前分割窗口的父窗口 。如果在一个窗口内有分割窗口,而在其中一个分割窗口中又包含着分割窗口,则第2层的分割窗口可以用parent变量引用包含它的父分割窗口。 opener: 指 用WINDOW.OPEN等方式创建的新窗口对应的原窗口 。 附: Window对象、Parent对象、Frame对象、Document对象和Form对象的阶层关系:Windwo对象→Parent对象→Frame对象→Document对象→Form对象 , 如下:parent.frame1.document.forms[0].elements[0].value; 问题: 在一个页面嵌入框架<iframe>,然后在框架中使用jvascript脚本:parent.xx.value='xxxxx'; 在IE中可以正常看到赋值,但是在firefox中则不能完成赋值。请问在firefox中调用父框架的对象应该是哪个,是否和IE兼容? 解答: window.parent.document.form名.xx.value='xxxxx'; window可省略。 parent

js拖动滑块

大城市里の小女人 提交于 2020-02-01 14:36:28
在PC端可以用mousedown来触发一个滑块滑动的效果,但在手机上,貌似无法识别这个事件,但手机上有touchstart事件,可以通过一系列“touch”事件来替代PC端的“mouse”事件。 移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成。但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件。处理touch事件能跟踪到屏幕滑动的每根手指。 以下是四种touch事件 touchstart: //手指放到屏幕上时触发 touchmove: //手指在屏幕上滑动式触发 touchend: //手指离开屏幕时触发 touchcancel: //系统取消touch事件的时候触发,这个好像比较少用 每个触摸事件被触发后,会生成一个event对象,event对象里额外包括以下三个触摸列表 touches: //当前屏幕上所有手指的列表 targetTouches: //当前dom元素上手指的列表,尽量使用这个代替touches changedTouches: //涉及当前事件的手指的列表,尽量使用这个代替touches 这些列表里的每次触摸由touch对象组成,touch对象里包含着触摸信息,主要属性如下: clientX / clientY: //触摸点相对浏览器窗口的位置 pageX / pageY: /

JS作用域和作用域链

心不动则不痛 提交于 2020-02-01 12:27:09
在JS代码执行之前会首先创建一个全局作用域,里面有所有的定义的变量。 在函数定义的时候也会创建一个函数的作用域,作用域中包含了该函数中所定义的变量。 具体还没有理解很清楚,感觉作用域和执行上下文很像。 就是当在函数执行的代码中使用到某个变量的时候,它首先会在自己的作用域中找该变量,如果找不到就去上一级的作用域中找,一直到全局作用域,直到找到为止。如果都找不到就为undefined。 注在es5中没有块作用域,在es6中有。 及例子如下: if(true) {   var a = 4; } console.log(a);//在es5中是可以输出4的,因为一个{}中的代码就叫做块作用域,在es5中没有块作用域,只有函数作用域。 来源: https://www.cnblogs.com/maycpou/p/12248047.html

JS 定时器与延时器

怎甘沉沦 提交于 2020-02-01 12:21:26
avaScript里面内置了两个定时器,一个是setTimeout()一个是setInterval()。下面将由浅入深来理解一下定时器的工作原理。 使用方式: setTimeout() function out(){ alert("定时器"); }; var timeoutID = window.setTimeout(out,10000); setTimeout 的语法非常简单,第一个参数为回调函数,第二个参数为延时的时间。函数返回一个数值类型的ID唯一标示符,此ID可以用作 clearTimeout 的参数来取消定时器: 第一个参数可以传入多个回调函数中间以";"隔开即可,另外要注意的是函数不能加(),不能写成out();否则就会有意想不到的错误。 setInterval() 该方法使得一个函数每隔固定时间被调用一次,是一个很常用的方法。如果想要取消定时执行,和clearTimeout方法类似。 第一个方法和第二个方法的最大差别是一个是只执行一次,一个是会循环执行。 来源: https://www.cnblogs.com/CWJDD/p/11030781.html

js---定时器

自古美人都是妖i 提交于 2020-02-01 12:20:31
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script> //window 对象是一个最顶层对象 //window.setInterval("alert('123');",2000);//每个两秒弹出一次消息框 function test(){ console.log("setINterval 调用了"); } setInterval("test()",2000); //如上实现一个函数的循环调用 //setTimeout("test()",2000);//2000ms执行一次之后就不在执行。不具备setInterval的循环功能。 var timerID; function start() { timerID=setInterval("test()",2000); } function stop() { clearInterval(timerID);//使用语法停止了计时器的运行 } </script> </head> <body> <input type="button" value="开启定时器" onclick="start()" /> <input type="button" value="停止定时器" onclick="stop()" /> </body> </html>