JS
文章平均质量分 61
微 光
纵有疾风起,人生不言弃
展开
-
三种方法解决setTimeout的循环输出问题
for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000);}console.log(i);结果:先打印5,一秒后打印5个5原因:由于JavaScript是单线程的,按顺序执行,setTimeout是异步函数,它会将内部函数放到任务队列中,而此时会先将循环执行完毕再执行内部函数,因此当执行内部函数时i已经等于5了,所以最终会输出5个5方案一:...原创 2021-04-11 16:52:12 · 4256 阅读 · 0 评论 -
V8的垃圾回收机制
V8内存限制在 JavaScript 中,V8 只能使用系统的一部分内存。具体来说,在 64 位系统中,V8 最多只能分配 1.4g,在 32 位系统中,最多只能分配 0.7g。在浏览器端,大内存的需求并不多,但是对于后端而已,node.js如果遇到一个 2g 多的文件,那么将无法将其全部读入内存并进行各种操作。JS 的内存分为栈内存和堆内存。栈内存很简单,当 ESP 指针下移,也就是上下文切换之后,栈顶的空间会被自动回收。但是堆内存就相对比较复杂,下面会着重分析。我们知道,所有原创 2021-03-26 15:53:18 · 231 阅读 · 0 评论 -
JS中的this
对this指向大致的定义this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象1.普通函数调用,此时 this 指向 window例一:function test(){ var name = "翊枫"; console.log(this.name); //undefined console.log(this); //Window}test();上面说过this最终指向的是..原创 2021-03-15 21:59:47 · 211 阅读 · 0 评论 -
JS数组排序
一、冒泡排序1、比较相邻的两个元素,如果前一个比后一个大,则交换位置。2、比较完第一轮的时候,最后一个元素是最大的元素。3、这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。function sort(arr) { let len = arr.leghth for (let i = 0; i < len-1; i++) { //解释下为什么要减1,假如数组的长度为8.所以i最大是6.当i等于6的时候,j只能等于0.所以最后比较的是arr[6]和arr[7]原创 2021-03-15 16:44:51 · 266 阅读 · 0 评论 -
继承
继承:子类继承父类中的属性和方法(目的是让子类的实例能够调取父类中的属性和方法)一、原型链继承:让父类中的属性和方法在子类实例的原型链上(实例想调用这些方法,是基于__proto__原型链查找机制完成的)子类.prototype = new 父类() 子类.prototype.constructor = 父类 -->保证原型重定向后的完整性 function A(x) { this.x=x } A.prototype.getX=function(){ .原创 2021-03-14 23:07:15 · 240 阅读 · 0 评论 -
JS事件循环和经典异步面试题
关于JS这个标题下,我们只需要牢记一句话:JavaScript 是单线程语言既然JavaScript是单线程语言,那么就会存在一个问题,所有的代码都得一句一句的来执行。就像我们在食堂排队打饭,必须一个一个排队点菜结账。那些没有排到的,就得等着~事件循环(Event Loop)JavaScript有一个主线程main thread,和调用栈call-stack也称之为执行栈。所有的任务都会放到调用栈中等待主线程来执行。JavaScript的Event Loop是伴...原创 2021-03-14 15:20:08 · 1084 阅读 · 1 评论 -
JS二分查找实现及时间复杂度
二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。(3)如果某一步数组为空,则表示找不到目标元素。非递归//非递归 function search(arr,key) { let min = 0 let m.原创 2021-03-10 18:06:22 · 751 阅读 · 0 评论 -
JavaScript常见的数组去重
一、利用ES6 Set去重(ES6中最常用)let arr=[1,'1',1,2,3,4,4,5][...new Set(arr)]//也可用Array.from(new Set(arr) 这种方法还无法去掉“{}”空对象二、利用双层for循环,然后splice去重(ES5中最常用)双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值。var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,u原创 2021-03-08 17:16:25 · 327 阅读 · 4 评论 -
JS实现栈
栈是一种先进后出的特殊线性表结构,存储上分链式存储和顺序存储两种方式原创 2021-03-01 11:49:47 · 119 阅读 · 0 评论 -
JS 分步实现柯里化函数
https://blog.csdn.net/weixin_34329187/article/details/91396617转载 2021-03-01 11:40:38 · 128 阅读 · 0 评论 -
JS传参是按值传递还是按引用传递?
首先要清楚的是,什么是按值传递?什么又是按引用传递?值传递(call by value):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。引用传递(call by refrence):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参原创 2020-12-02 15:58:48 · 1603 阅读 · 0 评论 -
常用JS数组操作集合
JS中的数组操作,这篇文章总结非常细致,有兴趣可前往查看:https://blog.csdn.net/weixin_33720956/article/details/87947330原创 2019-11-26 15:23:47 · 153 阅读 · 0 评论 -
一行JS代码实现时间戳转时间格式
前端开发过程中,常常需要将时间戳转化为标准时间格式供用户浏览。不借助方法库的情况下,如何又快又好的实现呢?下面介绍两种方法。老方法平常用的基本是这个方法,用Date方法依次将年月日时分秒一个个算出来,然后拼接成需要的时间格式字符串。function transformTime(timestamp = +new Date()) { if (timestamp) { ...原创 2019-11-25 11:17:31 · 444 阅读 · 0 评论 -
JS中toString()和valueOf()的用法及两者的区别
基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外。它们俩解决javascript值运算与显示的问题。1.用法如下:toString()方法:返回对象的字符串表示。对象 操作 Array 将Array的元素转换为字符串。结果字符串由逗号分隔,且连接起来。 Boolean 如果 Boolean 值是true,则返回...原创 2018-11-15 16:25:23 · 5552 阅读 · 4 评论 -
var、let 和 const 区别的实现原理
var和let的区别,面试老生常谈的问题,大多数人回答可能就是作用域和变量提升这两点不同,少有人能够知道内在原理,这样的回答面试官会满意吗?(手动滑稽)我们就从声明过程,内存分配,和变量提升这三点来看这三者之间的区别。一.声明过程var:遇到有var的作用域,在任何语句执行前都已经完成了声明和初始化,也就是变量提升而且拿到undefined的原因由来 function: 声明、初始化...原创 2019-08-14 17:49:49 · 4771 阅读 · 8 评论 -
JavaScript 中 Number()、parseInt()、parseFloat()的区别
Number(): 概述:Number对象由Number()构造器创建,是经过封装的能让你处理数字值的对象。在非构造器上下文中 (如:没有new操作符),Number能被用来执行类型转换。 语法:Number(value); 特点: 1、如果是Boolean值,true和false值将分别被转换为1和0。 2、如果是数字值,只是简单的传入和返回。 ...原创 2019-09-17 15:25:57 · 371 阅读 · 0 评论 -
JS 3 个判断数组的方法
1. Object.prototype.toString.call()每一个继承 Object 的对象都有toString方法,如果toString方法没有重写的话,会返回[Object type],其中 type 为对象的类型。但当除了 Object 类型的对象外,其他类型直接使用toString方法时,会直接返回都是内容的字符串,所以我们需要使用call或者apply方法来改...原创 2019-09-23 16:28:38 · 249 阅读 · 0 评论 -
Promise
前言基本上面试问Promise首先会问你很简单的一句,“你了解过Promise吗”这是时候只要你把我下面“是什么”的说明理解好了就足够了。但是假设面试官追问下去,你要对他的一些方法要有理解。是什么Promise是解决异步编程的一种方案。以前我们处理异步操作,一般都是通过回调函数来处理,典型的例子就好像使用setTimeout一样,如果执行操作函数里面还有setTimeout,一层一...原创 2019-10-09 14:52:39 · 239 阅读 · 0 评论 -
再次认识闭包
何为闭包1)官方一点说,能够读取其他函数内部的局部变量的函数,即为闭包。抓住几个点:它自身是个函数 访问其他函数,即非自身函数内 局部变量2)从表现上来认识: 一个函数A里定义了另一个函数B,B读取了A的局部变量3)从特性上去认识:函数内定义的局部变量,会随着函数的执行完毕而被销毁,内存被回收。但是在闭包存在的情况下,局部变量被闭包函数引用,因此没有被立即销毁,还能被访问到,直...原创 2019-10-10 14:32:35 · 245 阅读 · 0 评论 -
快速理解事件委派
概念利用冒泡机制实现对元素的时间处理程序。即,把对该元素要进行的事件处理,利用冒泡机制,将其处理程序绑定到(委派)祖先级(一般为父级)上进行执行。要理解事件委派,先掌握两个概念—— 捕获与冒泡捕获与冒泡假设我们点击页面上的一个元素,这个过程会存在捕获和冒泡阶段。捕获阶段从祖先元素一级一级地遍历到点击的元素所在节点的过程,叫捕获阶段。其所经历的元素都会触发点击事件(因为这里是...原创 2019-10-10 14:42:50 · 376 阅读 · 0 评论 -
JS手写代码Call、apply、bind
call一句话介绍 call:call() 方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法。举个例子:var foo = { value: 1};function bar() { console.log(this.value);}bar.call(foo); // 1注意两点:call 改变了 this 的...原创 2019-08-06 16:26:17 · 305 阅读 · 0 评论 -
Sort()函数使用+如何打乱数组(洗牌算法)
srot()如果不带参数,是将按字母顺序对数组中的元素进行排序,也就是是按照字符编码的顺序进行排序。var arr1 = ['a', 'd', 'c', 'b'];arr.sort(); //['a', 'b', 'c', 'd']var arr2 = [10, 5, 40, 25, 100, 1];arr2.sort(); //[1, 10 ,100, 25, 40, 5]...原创 2019-08-06 16:24:34 · 793 阅读 · 0 评论 -
ES6箭头函数修复ES5中this指向问题
长期以来,ES5中this对象一直的指向一个令人头痛的问题,在对象方法中使用此,必须非常小心例如:class Animal { constructor(){ this.type = 'animal' } says(say){ setTimeout(function(){ console.log(this.type...原创 2018-12-10 16:26:18 · 2456 阅读 · 0 评论 -
用ES6解决ES5中原型、构造、继承三大难题
ES6中新加入的三个特性 class、extends、 super这三个特性涉及了ES5中最令人头疼的原型、构造和继承。解决了ES5中晦涩难懂的语法和乱七八糟的指针。class Animal { constructor(){ this.type = 'animal' } says(say){ console.log(this.ty...原创 2018-12-10 16:13:58 · 5677 阅读 · 0 评论 -
从一道简单面试题来解读JS中的闭包和作用域
先上代码var count=10;//全局作用域 标记为f1function add(){ var count=0;//函数全局作用域 标记为f2 return function(){ count+=1;//函数的内部作用域 alert(count); }}var s=add()s();//输出1s();//输出2加()的...原创 2018-12-06 23:17:46 · 5824 阅读 · 0 评论 -
JS如何给ul下的所有li绑定点击事件,点击使其弹出下标和内容
这是一个非常常见的面试题,出题方式多样,但考察点相同,下面我们来看看这几种方法:方法一: var itemli = document.getElementsByTagName("li"); for(var i = 0; i<itemli.length; i++){ itemli[i].index = i; //给每个li定义一个属性索引值 itemli...原创 2018-11-09 17:57:46 · 16899 阅读 · 0 评论 -
原生Ajax写法和ES6中Promise结合Ajax写法
原生AJAXvar Ajax={ get: function(url, fn) { // XMLHttpRequest对象用于在后台与服务器交换数据 var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onreadystatechange = func...原创 2018-11-28 21:55:58 · 1330 阅读 · 0 评论 -
JS浮点数精度缺失问题
先看一个例子alert(0.7+0.1);//输出0.7999999999999999alert(0.6+0.2);//输出0.8第二个正确,但第一个是什么鬼,那这是js的错误吗?当然不是。减法乘法之类的也会有这个问题。你的电脑做着正确的二进制浮点运算,但问题是你输入的是十进制的数,电脑以二进制运算,这两者并不是总是转化那么好的,有时候会得到正确的结果,但有时候就不那么幸运了。...原创 2018-12-06 22:36:00 · 334 阅读 · 0 评论 -
JS验证文本框字数并做限制和提示
效果如图;解决输入时拼音长度也算字符串长度的问题。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, init原创 2019-01-07 12:45:40 · 5871 阅读 · 0 评论 -
彻底搞懂JS中的数据类型
基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。1、常见的基本数据类型: Number、String 、Boolean、Null和Undefined。基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值。示例: var a = 10; var b = a; b = 20; console.log(a); // 10值 上面,b获...原创 2019-01-12 11:38:36 · 2468 阅读 · 0 评论 -
面试题get和post的区别,探寻本质区别
自己的简单回答上了N年的班,出去面试还是有时候会遇到简单的问题因为没有准备所以基本只能回答下平常注意的点1.链接地址长短限制2.提交的内容3.安全性(url编码中文)被鄙视了!!!!标准的回答浏览器回退:GET在浏览器回退时是无害的,而POST会再次提交请求。收藏书签:GET可以,而POST不能浏览器缓存:GET请求会被浏览器主动cache,而POST...原创 2019-03-28 10:41:44 · 7921 阅读 · 2 评论 -
JS数组reduce()方法详解及高级技巧(逼格满满的reduce)
reduce()方法可以搞定的东西,for循环,或者forEach方法有时候也可以搞定,那为啥要用reduce()?这个问题,之前我也想过,要说原因还真找不到,唯一能找到的是:通往成功的道路有很多,但是总有一条路是最捷径的,亦或许reduce()逼格更高...1、语法arr.reduce(callback,[initialValue])reduce 为数组中的每一个元素依次执行...原创 2019-03-28 15:41:55 · 8432 阅读 · 0 评论 -
callee和caller的区别和用法
先来一个通俗易懂的简单描述:简单一点来说caller是指向调用当前函数的函数,比如b函数调用a函数,那么a.caller则是b的引用;callee是arguments的一个属性,指向其函数自身,比如在a函数中,arguments.callee就是a,这个特性可以用来计算正整数的阶乘,x*arguments.callee(x-1)也可以用来比较实参和形参,arguments.length和arg...原创 2019-04-03 15:10:54 · 15867 阅读 · 3 评论 -
JS发送短信,将指定内容发送给指定号码
ios端: <a href="sms:10001&body=重置密码">发送短信</a>安卓端:<a href="sms:10001?body=重置密码">发送短信</a>原创 2019-07-25 17:47:44 · 2020 阅读 · 0 评论 -
一道关于变量提升的题目
(function(){ var x = y = 1; })(); console.log(y);console.log(x);答案: 1, error解析:这道题目涉及到变量提升的范围,以及赋值语法。var x=y=1 等价于 var x=1; y=1; 这里的y会被提升至全局域,所以是上述答案。var x=1,y=1 等价于var x=1; var y=1, 这样写的话,...原创 2019-05-21 20:51:24 · 1537 阅读 · 0 评论 -
JS有趣的比较符
[1 < 2 < 3, 3 < 2 < 1]答案: true, true解析:1<2<3 等价于1<2=> true; true<3 => 1<3=> true;3<2=> false; false<1 => 0<1=> true原创 2019-05-21 20:48:00 · 163 阅读 · 0 评论 -
你真的了解“==”吗?
下面两个代码段的输出是?var a = [0];if ([0]) { console.log(a == true);} else { console.log("wut");}[]==[]答案:false, false解析:如果单纯的把[0]转换成boolean类型的话,结果会是true,所以if判断语句的结果是true。[] == ![];[] == f...原创 2019-05-21 20:43:42 · 669 阅读 · 0 评论 -
JS获取对象长度
方法一:通过for in 遍历对象,并通过hasOwnProperty判断是否是对象自身可枚举的属性let obj = {"c1":1,"c2":2};let count=0; for(var i in obj){ if(Object.prototype.hasOwnProperty.call(obj,i)){ count++; } }console....原创 2019-05-21 16:20:40 · 1167 阅读 · 0 评论 -
JS向下取整
parseInt(15.5);//15Math.floor(15.5);//1515.5 >>>0;//1515.5 >>0;//1515.5|0;//15~~(15.5);//15其实就是去掉小数点原创 2019-05-20 20:01:24 · 4591 阅读 · 0 评论 -
高逼格的帧动画-requestAnimationFrame
在Web应用中,实现动画效果的方法比较多,Javascript 中可以通过定时器 setTimeout 来实现,css3 可以使用transition 和 animation 来实现,html5 中的 canvas 也可以实现。除此之外,html5 还提供一个专门用于请求动画的API,那就是 requestAnimationFrame,顾名思义就是请求动画帧。为了深入理解requestAni...原创 2019-05-05 11:20:08 · 572 阅读 · 0 评论