
javascript
这个昵称没有被占用吧
这个作者很懒,什么都没留下…
展开
-
如何区分防抖和节流
**防抖:**指在时间n内,函数被触发多次,但是只执行一次,只会执行最新的触发。也就是说,在时间n内,碰到新的触发,就清除之前的,重新计时。**节流:**当持续触发某个事件时,会有规律的每隔时间n就才执行一次函数。...原创 2019-10-09 10:20:59 · 316 阅读 · 0 评论 -
JavaScript中利用二叉树对数组进行排序
二叉树和二叉搜索树二叉树中的节点最多只能有两个子节点:一个是左侧子节点,另一个是右侧子节点。二叉搜索树(BST)是二叉树中的一种,但是它只允许在左侧节点存储比父节点小的值,在右侧几点存储比节点大(或相等)的值。可以利用BST的这种特性,对数组进行排序:class Node{ constructor(key){ this.key = key; this...原创 2018-11-12 11:40:00 · 709 阅读 · 0 评论 -
浏览器进程
浏览器是多进程的,主要包含的进程有:Browser进程:浏览器的主进程(负责协调、主控),只有一个。作用包括:负责浏览器界面显示,与用户交互。如前进后退等负责各个页面的管理、创建和销毁其它进程将Render进程得到的内存中的Bitmap,绘制到用户界面上网络资源的管理、下载等第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建GPU(Graphics P...转载 2018-11-14 11:16:02 · 595 阅读 · 0 评论 -
同步任务、异步任务、宏任务、微任务基本概念
**同步任务:**指的是在主线程傻姑娘排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。**异步任务:**指的是不进入主线程,某个异步任务可以执行了,该任务才会进入主线程执行。异步执行的运行机制如下(同步任务也如此,因为它可以被视为没有异步任务的异步执行):所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)主线程之外,还存在一个“任务...转载 2018-11-13 15:37:53 · 5028 阅读 · 0 评论 -
JavaScript中常考小问题集锦
1、判断回文字符串回文字符串:如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是回文(palindrome)。1⃣️递归的方法function palindrome(str){ var lowerStr = str.toLowerCase().replace(/\W/g,""); if(lowerStr.length==0) return true; ...转载 2018-11-12 16:16:50 · 146 阅读 · 0 评论 -
正则表达式判断素数
!/^.?$|^(..+?)\1+$/.test(Array(你的数字+1).join('1'))返回true,则是素数;否则不是。转载 2018-11-05 11:29:59 · 346 阅读 · 0 评论 -
javascript十大经典排序算法
一、冒泡排序二、选择排序三、插入排序四、希尔排序五、归并排序六、快速排序七、堆排序八、计数排序九、桶排序十、基数排序原创 2018-11-09 18:00:31 · 1670 阅读 · 0 评论 -
js词法作用域
首先,我们来看一段简单js的执行结果:function foo() { console.log( a ); }function bar() { var a = 3; foo();}bar();var a = 2;bar();思考时间原创 2018-11-01 17:21:34 · 283 阅读 · 0 评论 -
requestAnimationFrame实现setInterval类似功能(不考虑requestAnimationFrame兼容问题)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content=&a原创 2018-11-14 15:16:13 · 1373 阅读 · 0 评论 -
元素class类名的添加和删除之classList
相信很多人都知道通过element.className的方式给元素添加class属性或获取元素的class属性。本文要介绍的HTML DOM classList是也可用于给元素添加、移除或切换class属性。classList的基本使用:一、语法:element.classList返回的是一个DOMTokenList类数组对象。二、属性:length 返回类列表中类的数量value...转载 2018-11-20 15:24:40 · 6588 阅读 · 0 评论 -
让你一次了解document.forms和document.formName的兼容性
今天在代码中不小心写了两个name相同的form表单,然后通过document.forms[formName]形式获取到的只有第一个表单,然后深入学习了下document.forms[formName]和document.formName的区别和兼容性。下面先测试了下document.forms[formName]、document.forms.formName、document.formNam...原创 2018-11-16 11:17:33 · 3767 阅读 · 1 评论 -
js实现深拷贝
方法一:递归方法function deepClone(obj){ var copy = obj instanceof Array ? [] : {}; for(var key in obj){ if(obj[key] && typeof obj[key]==="object"){ copy[key] = deepClon...原创 2019-03-13 10:30:24 · 216 阅读 · 0 评论 -
js中的事件捕获和事件捕获
事件流的三个阶段:事件捕获阶段目标阶段事件冒泡事件关于这三个阶段的介绍网上已经有很多介绍了,在这里不做介绍。本文主要说下需要注意的一点:当在事发元素上即绑定了捕获事件又绑定了冒泡事件时,事发元素上的执行顺序由事件注册顺序决定。 如:var p = document.getElementById("parent");var s = document.getElementB...原创 2018-09-10 20:39:21 · 1581 阅读 · 0 评论 -
返回结果是一个对象obj,但是obj instanceOf Object返回false
今天在使用koa的使用,为了判断传入参数中是否正确,使用了object的hasOwnPrototype,但是却发现代码报错了。首先获取到参数:var params = ctx.query;然后判断返回对象中是否存在指定参数,如user参数:params.hasOwnPrototype("user")最后执行的时候,发现代码报错执行params instanceOf Object,发现返回的...原创 2019-03-04 14:03:26 · 3114 阅读 · 0 评论 -
理解JavaScript的async/await
本文摘自边城的理解JavaScript的async/await一文以及git上关于Mavericker-1996关于async/await的一些见解主要需要理解javascript中同步任务、异步任务、宏任务和任务。宏任务(macro task)主要包含:script(整体代码)、setTimeout、setInterval、I/O、UI交互事件、postMessage、MessageCh...转载 2019-02-27 10:24:40 · 384 阅读 · 0 评论 -
Number.parseInt和parseInt
我们都知道在js中,可以通过Number.parseInt() 方法把一个字符串解析成整数。该方法和全局的 parseInt() 函数是同一个函数。但是,今天在用iphone 5c测试h5页面时,却发现一个问题,那就是Number.parseInt方法无效,必须使用parseInt。...原创 2019-01-04 17:01:26 · 1385 阅读 · 0 评论 -
border-radius:50%和100%的区别
在使用border-radius时,发现有些人使用50%,有些人使用100%,都可以得到一个圆,那这两个值到底有什么区别呢:border-radius的值是百分比的话,就相当于盒子的宽度和高度的百分比。如一个50px 150px的方形,如果border-radius设置为100%,则等价于:border-radius: 50px/150px;而border-radius又是由border...转载 2018-12-17 16:26:18 · 15590 阅读 · 0 评论 -
js实现复制文本到剪切板
代码:<script type="text/javascript">function copyUrl2() { var Url2=document.getElementById("biao1").innerText; var oInput = document.createElement('input'); oInput.va...转载 2018-12-17 09:50:39 · 499 阅读 · 0 评论 -
js中创建对象和继承的方法
原创 2018-11-27 10:18:48 · 188 阅读 · 0 评论 -
【JavaScript重中之重】关于原型与原型链,prototype和__proto__的理解
说到原型链,必须先抛出这张图了原创 2018-11-18 22:21:30 · 453 阅读 · 0 评论 -
判断设备是否为移动端
常用方法:获取user-agent,如果user-agent中包含Mobile,则为移动端其它方法:'ontouchstart' in document如果返回true,则设备为移动端,否则为pc端原创 2018-11-21 14:22:22 · 588 阅读 · 0 评论 -
js中值类型和引用类型的区别(无举例)
js中的变量类型有哪些?(1)值类型:字符串string、数值number、布尔值boolean、null、undefined(2)引用类型:对象object、数组array、函数function值类型和引用类型的区别(1)值类型:1⃣️占用空间固定,保存在栈中(当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这...转载 2018-10-25 16:04:14 · 679 阅读 · 3 评论 -
一个页面有多个script标签时,执行顺序
JavaScript解释器在执行脚本时,是按块执行的。通俗地说,就是浏览器在解析HTML文档流时,如果遇到一个script标签,则JavaScript解释器会等到这个代码块都加载完成后,先对代码块进行预编译,然后再执行。执行完毕后,浏览器会继续解析下面的HTML文档流,同时JavaScript解释器也准备好处理下一个代码块。执行步骤:step1. 读入第一个代码块step2. 做语法分析,有...转载 2018-10-19 14:13:49 · 7984 阅读 · 4 评论 -
js中数据类型的判断
javas中数据类型的判断方法:typeof、instanceof、constructor、 prototype例题解释:var a = 1;var b = false;var c = "abc";var d = [1,2,3];var e = new Date();var f = function(){console.log("function")};使用typeof判断类型:type转载 2016-09-18 16:59:38 · 285 阅读 · 0 评论 -
js中==比较符的原则
1. null和undefined是相等的2. 要比较相等性之前,不能将null和undefined转换成其他任何值3. 如果有一个操作是NaN,则相等操作符返回false,而不相等操作符返回true。NaN和任何数都不相等,包括NaN本身,即NaN==NaN返回false4. 如果一个值是数字,另一个是字符串,先将字符串转换为数值,然后使用转换后的值进行比较5. 如果其中一个值是true,则将其转转载 2016-10-12 22:03:42 · 435 阅读 · 0 评论 -
javascript中apply、call和bind的区别
相同点:都是用来改变函数的this对象的指向的第一个参数都是this要指向的对象都可以利用后续参数传参举个例子来说明用处:var xw = { name:"xiaowang", say:function(sex){ console.log("i am "+this.name+",i am a "+sex); }}var xh = { nam转载 2016-09-27 22:38:40 · 232 阅读 · 0 评论 -
js Array对象的迭代方法和归并方法
迭代方法ECMAScript5为数组对象定义了5个迭代方法。每个方法接收两个参数:要在每一项上运行的函数(接收3个参数:数组项的值,该项在数组中的位置,数组对象本身)和(可选的)运行该函数的作用域对象——影响this的值。 every()对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true filter()对数组中的每一项运行给定函数,返回该函数会返回true的项组成的原创 2016-10-12 21:55:50 · 981 阅读 · 0 评论 -
String类型中slice()、substr()和substring()方法的区别
相同点: 这三个方法都会返回被操作字符串的一个子字符串,而且也都接收一个或两个参数,第一个参数指定字符串的开始位置,第二个参数(可选)表示子字符串到哪里结束。 区别: - slice()和substring()的第二个参数指定的是子字符串最后一个字符后面的位置 - substr()的第二个参数指定的是返回的字符串个数 - slice()会将传入的负值与字符串的长度相加;substr(原创 2016-09-23 16:34:04 · 612 阅读 · 0 评论 -
js中获取小数中的整数部分
当我们遇到将取小数整数部分的时候,最常用的方法就是Math.floor(),将小数向下取整就是这个小数的整数部分。今天学术Number类型的方法时,发现其实还有很多方法可以实现。原创 2016-09-23 16:13:27 · 3858 阅读 · 0 评论 -
js关于闭包那些事儿
理解闭包,首先要理解js中几个基本的特性:执行环境、作用域链、垃圾回收机制、函数嵌套执行环境 每调用一个函数时(执行函数时),系统会为该函数创建一个封闭的局部的运行环境,即该函数的执行环境。函数总是在自己的执行环境中执行,如读写局部变量、 函数参数、运行内部逻辑。创建执行环境的过程包含了创建函数的作用域,函数也是在自己的作用域下执行的。从另一个角度说,每个函数执行环境都有一个作用域 链,子函数的作转载 2016-09-18 18:58:17 · 278 阅读 · 0 评论 -
正则表达式(RegExp)的方法和字符串的模式匹配方法
都能够测试字符串中是否存在指定格式的字符。两种方法主要的区别在于,调用方法的对象和传递的参数,正则表达式的方法调用方法的对象是正则表达式,传输的参数是字符串,而字符串的模式匹配调用方法的对象是字符串,传递的参数是正则表达式。RegExp对象的方法:exec():接收一个参数,即要应用模式的字符串,返回包含第一个匹配项信息的数组;如果没有匹配项,则返回null。返回的数组包含两个属性:index和i原创 2016-09-03 16:33:03 · 6247 阅读 · 0 评论 -
javascript中的变量提升和函数声明提升
在js中,有一个重要特点就是,函数声明和变量声明都会提升。然后今天突然意识到一个问题,当既存在函数声明又存在变量声明时,哪个“优先级”高??先来看看下面代码的运行结果: 例1:getAge();var age = 25;function getAge(){ alert("The age is "+age);}运行结果:The age is undefined;例2:getAge()原创 2016-09-07 16:56:36 · 322 阅读 · 0 评论 -
javascript中的callee和caller
因为这两个属性名称太相似了,所以容易混淆。 callee是arguments的属性,该属性是一个指针,指向拥有arguments对象的函数;而caller是函数对象的属性,这个属性中保存着调用当前函数的函数的引用,如果在全局作用域中调用当前函数,它的值是null。callee常用于递归函数中,如:function factorial(num){ if(num<=1){ re原创 2016-09-03 11:38:47 · 430 阅读 · 0 评论 -
函数声明与函数表达式
js中,定义函数常用的两种方法:函数声明和函数表达式。 函数声明:function sum(item1,item2){ //代码块}函数表达式:var sum = function(item1,item2){ //代码块};函数声明和函数表达式存在的一个最大的区别就是:函数声明会被提升,即js引擎会将函数声明提升到顶部。如下代码:console.log(sum(1,2));f原创 2016-09-03 10:49:47 · 267 阅读 · 0 评论 -
事件处理程序
事件就是用户或浏览器自身只i系那个的某种动作,诸如click、mouseover和mouseout等,都是事件的名称。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以“on”开头。HTML事件处理程序某个元素支持的每种事件,都可以用一个与相应事件处理程序同名的HTML特性来指定。这个特性的值应该是能够执行的JavaScript代码。如:<input type="butto原创 2016-10-20 16:50:10 · 386 阅读 · 0 评论 -
事件对象
在触发DOM上的某个事件时,会产生一个事件对象event,这个对象包含着所有与事件有关的信息。DOM中的事件对象兼容DOM的浏览器会将一个event对象传入到事件处理程序中。如:var btn = document.getElementById("myBtn");btn.obclick = function(event){ alert(event.type);} 属性/方法 读写原创 2016-10-20 19:48:53 · 298 阅读 · 0 评论 -
js数组去重的方法
var arr = [“abc”,”12abc”,”defa”,”ijk45”,”abc”,”ijk45”]; console.log(“原始数组:”+arr); 方法一:创建一个新数组,用来存放不重复的值,使用双重循环,每一次都比较新数组内的内容 var newArr1 = []; for (var i = 0; i < arr.length; i++) { var flag =原创 2016-12-03 11:00:54 · 745 阅读 · 0 评论 -
var/let/const变量提升
var声明的创建、初始化和赋值过程console.log(a);var a = 1;在执行过程中,会有一下过程:在全局环境中创建用var声明的这些变量,即a将这些变量初始化为undefined执行console.log(a)a = 1将变量为1let/const声明的创建、初始化和赋值过程{ let x = 1; x = 2;}找到所有用let声明的变量,在环境...转载 2018-09-18 11:25:32 · 1457 阅读 · 1 评论 -
判断点击事件是用户点击还是程序触发
function judge(){ if(event && event.target==event.currentTarget){ // 点击事件由用户点击触发 }else { // 点击事件由程序调用触发 }}原创 2018-09-04 11:05:10 · 4791 阅读 · 0 评论 -
js数组方法思维导图
注:标记的方法为ES6新增方法转载 2018-08-07 16:31:36 · 439 阅读 · 0 评论