javascript
文章平均质量分 66
javascript
火兰
正在努力的人
展开
-
json.stringify()的妙用,json.stringify()与json.parse()的区别
localStorage/sessionStorage默认只能存储字符串,而实际开发中,我们往往需要存储的数据多为对象类型,那么这里我们就可以在存储时利用json.stringify()将对象转为字符串,而在取缓存时,只需配合json.parse()转回对象即可。其次,JSON.stringify()的受众更多是对象,而toString()虽然可以将数组转为字符串,但并不能对{name:'天子笑'}这类对象实现你想要的操作,它的受众更多是数字。需要注意一点,由于此方法是将JSON字符串转换成对象,所以。原创 2022-09-11 20:39:32 · 315 阅读 · 0 评论 -
【JS】深拷贝与浅拷贝的区别,实现深拷贝的几种方法
壹 ❀ 引如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。此篇文章中也会简单阐述到栈堆,基本数据类型与引用数据类型,因为这些概念能更好的让你理解深拷贝与浅拷贝。我们来举个浅拷贝例子:let a=[0,1,2,3,4], b=a;console.log(a===b);a[0]=1;console.log(a,b);嗯?明明b复制了a,为啥修改数组a,数组b也跟着变了,这里原创 2022-09-11 19:54:26 · 184 阅读 · 0 评论 -
JS 从内存空间谈到垃圾回收机制
在上述代码中,当dom元素renderer被移除时,由于是周期定时器的缘故,定时器回调函数始终无法被回收,这也导致了定时器会一直对数据serverData保持引用,好的做法是在不需要时停止定时器。在js中堆内存一般用于存储引用类型的数据,需要注意的是由于引用类型的数据一般可以拓展,数据大小可变,所以存放在堆内存中;当我们创建数组a时,栈内存中只保存了变量a与指向堆内存中数组的地址指针,而当我们将a复制给变量b时,其实只是复制了一份地址指针,两者还是指向同一数组,无论谁修改,都会影响彼此。原创 2022-09-09 18:35:08 · 254 阅读 · 0 评论 -
JavaScript 中 call()、apply()、bind() 的用法
其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解!先看明白下面:例 1obj.objAge; // 17obj.myFun() // 小张年龄 undefined例 2shows() // 盲僧 比较一下这两者 this 的差别,第一个打印里面的 this 指向 obj,第二个全局声明的 shows() 函数 this 是 window ;1,call()、apply()、bind() 都是用来重定义 this 这个对象的!如:ob原创 2021-08-08 22:28:47 · 85 阅读 · 0 评论 -
JavaScript 中的相等性判断
JavaScript 中的相等性判断ES2015中有四种相等算法:抽象(非严格)相等比较 (==) 严格相等比较 (===): 用于Array.prototype.indexOf,Array.prototype.lastIndexOf,和case-matching 同值零: 用于%TypedArray%和ArrayBuffer构造函数、以及Map和Set操作, 并将用于 ES2016/ES7 中的String.prototype.includes 同值: 用于所有其他地...原创 2021-07-31 19:43:00 · 441 阅读 · 0 评论 -
js中构造函数与普通函数的区别
构造函数不仅只出现在JavaScript中,它同样存在于很多主流的程序语言里,比如c++、Java、PHP等等。与这些主流程序语言一样,构造函数在js中的作用,也是用来创建对象时初始化对象,并且总与new运算符一起使用。在js中,构造函数与普通函数的区别不是很大。接下来就主要讲讲两者的区别。1.在命名规则上,构造函数一般是首字母大写,普通函数则是遵照小驼峰式命名法。2.在函数调用时, 1 //构造函数 2 function Egperson (name,age) { 3 thi原创 2021-06-27 22:44:15 · 254 阅读 · 0 评论 -
十大排序方法
排序算法说明:(1)对于评述算法优劣术语的说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费的时间。空间复杂度: 运行完一个程序所需内存的大小。(2)排序算法图片总结: 1.冒泡排序:解析:1.比较相邻的两个元素,如果前一个比后一个大原创 2021-07-29 23:51:59 · 239 阅读 · 0 评论 -
switch的理解以及switch和if的应用场景
平时一般用if,switch用的很少,有必要简单总结下两者的区别:一、对switch的理解1、switch的括号里面放的是一个变量2、case相对应的值是关于这个变量的一个值3、switch里面的这个变量和case里面这个变量不会进行隐式类型的一个转换,而是进行了恒等比较。所以一定要注意这个变量和这个case里面的值是不是一个类型。4、关于switch里面的case会有一个穿透效果,这个效果有的时候会给我们带来好处,有的时候会给我们带来坏处,如果不需要这种穿透效果的时候,需要加break原创 2021-06-27 16:12:42 · 3069 阅读 · 0 评论 -
JS中变量的存储
JS中的变量是保存在栈内存中的基本数据类型的值直接在栈内存中存储; 值与值之间是独立存在的,修改一个变量不会影响其他变量;var a=20;var b=a;a++;对象(引用数据类型)是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟一个新的空间; 而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个变量修改属性是,另一个也会受到影响;var obj1=new Object();obj1.name="mike";var obj2=ob原创 2021-07-30 23:19:57 · 651 阅读 · 0 评论 -
currentTarget和target
最近面试被问到这个问题,还是感叹自己是个小白啊。 面试官问我target和currentTarget的区别。本文大多出自于一个掘金博主的文章点击打开链接target在事件流的冒泡阶段;currentTarget在事件流的捕获,冒泡阶段。只有当事件流处在冒泡阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的对象currentTarget指向当前事件活动的对象(一般为父级)。事件的冒泡和捕获通过两张图来了解一下吧事件捕获原创 2021-08-03 16:33:09 · 376 阅读 · 0 评论 -
详解JS原型与原型链
一、原型 任何对象都有一个原型对象,这个原型对象由对象的内置属性_proto_指向它的构造函数的prototype指向的对象 即任何对象都是由一个构造函数创建的,但是,不是每一个对象都有prototype,只有方法才有prototype。function Person() {}var p = new Person();//方法才有prototype,普通对象无prototypeconsole.log(Person.prototype); // Object{} console.l原创 2021-06-27 22:02:50 · 197 阅读 · 1 评论 -
js原型详解
js中的原型毫无疑问一个难点,学习如果不深入很容易就晕了!任何一个js知识点,比如事件流,闭包,继承等,都有许许多多的说法,对于这些知识点我们都应该先熟练的使用,然后自己整理一套属于自己的理解说辞,才不会忘原型(对象属性)Javascript规定,每一个函数都有一个prototype对象属性,指向另一个对象(原型链上面的)。prototype(对象属性)的所有属性和方法,都会被构造函数的实例继承。这意味着,我们可以把那些不变(公用)的属性和方法,直接定义在prototype对象属性上。pr原创 2021-08-07 01:45:19 · 358 阅读 · 0 评论 -
js的原型和原型链
构造函数创建对象:function Person() {}var person = new Person();person.name = 'Kevin';console.log(person.name) // KevinPerson 就是一个构造函数,我们使用 new 创建了一个实例对象 personprototype每个函数都有一个 prototype 属性每一个JavaScript对象(null除外)在创建的时候就会与之关联另一个对象,这个对象就是我们所说的原型,每一原创 2021-06-28 00:07:17 · 118 阅读 · 1 评论 -
JS中几种常见的高阶函数
高阶函数:英文叫Higher-order function。JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。 一个最简单的高阶函数:function add(x, y, f) { return f(x) + f(y);}//当调用add(-5, 6, Math.abs)时,参数x,y和f分别接收-5,6和函数Math.abs,根据函数定义,可以推导计算过程为://x = -原创 2021-07-29 23:54:16 · 1402 阅读 · 0 评论 -
JS写斐波那契数列的几种方法
JS写斐波那契数列的几种方法 斐波那契数,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。 常用的计算斐波那契数列的方法分为两大类:递归和循环。递归方法一:普通递归 代码优美逻辑清晰。但是有重复计算的问题,如:当n为5的时候要计算fibonacci(4)原创 2021-08-02 12:52:06 · 1814 阅读 · 0 评论 -
JavaScript之深浅拷贝
数组的浅拷贝 如果是数组,我们可以利用数组的一些方法比如:slice、concat 返回一个新数组的特性来实现拷贝。比如:var arr = ['old', 1, true, null, undefined];var new_arr = arr.concat();new_arr[0] = 'new';console.log(arr) // ["old", 1, true, null, undefined]console.log(new_arr) // ["new", 1, true, n原创 2021-07-31 00:20:31 · 93 阅读 · 0 评论 -
js属性对象的hasOwnProperty方法
Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。判断自身属性是否存在var o = new Object();o.prop = 'exists';function changeO() { o.newprop = o.prop; delete o.prop;}o.hasOwnProperty('prop'); // truechangeO();o.hasOwnProperty('prop'); // false原创 2021-07-31 00:19:29 · 89 阅读 · 0 评论 -
!简化请求数据
1、直接打印请求:2、用await、await化简::3、使用解构,解构出data原创 2021-07-31 00:10:24 · 77 阅读 · 0 评论 -
三分钟彻底理解冒泡排序
0.如果遇到相等的值不进行交换,那这种排序方式是稳定的排序方式。1.原理:比较两个相邻的元素,将值大的元素交换到右边2.思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。 (1)第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。 (2)比较第2和第3个数,将小数 放在前面,大数放在后面。 ...... (3)如此继续,知道比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成 (4)在上面一原创 2021-07-30 15:19:44 · 157 阅读 · 0 评论 -
引用数据类型的深拷贝
浅拷贝:只遍历一层,如果存在数组成员是对象,[{name:'jack'}],不会对对象里的值进行遍历拷贝。其实根据浅拷贝的方法不同,也有不同的效果。1. 其中最弱的浅拷贝为直接赋值let arr2 = arr1;是直接将整个arr1数组的地址赋给arr2,故arr2的任意值(为什么说任意值呢?因为后面会介绍到,有些浅拷贝,可以使部分值看上去有深拷贝的效果)改变,都会影响到arr1。2. 接下来介绍的四种浅拷贝方法就厉害一些了,它们在有些情况(原数组里的数据不包含引用类型)下也能达到深拷原创 2021-07-31 00:21:30 · 197 阅读 · 0 评论 -
js高阶函数数据的(过滤,计算,改变)!
filtermapreduce简洁写法原创 2021-05-28 11:10:01 · 178 阅读 · 0 评论 -
JS中target属性的使用
最近学习了target属性,是真的强大,可以不使用for()循环或者数组forEach()去判断我点击或者我需要找的是哪个元素,直接使用target点击就可获取。接下来说说target哪里强大。先看看target是什么意思target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口。我认为target事件就是会自动判断我们点的是哪个元素,我给大家举个简单的例子 <ul> <li>今天6.11</li>.原创 2021-05-10 17:58:09 · 11665 阅读 · 2 评论 -
VUE修饰符,事件处理
其实我们在平时总会用到一些方法去处理我们的事件函数,比如阻止事件的默认行为 、阻止事件冒泡等等。那在Vue.js中,对这些操作进行了一个很简易的处理,那就是在我们绑定的事件后面加一个事件修饰符,这样能让我们一眼就能看出,该组件绑定了什么事件 、对事件做了什么处理。 Vue.js为我们提供了很多不同种类的修饰符,例如事件修饰符、按键修饰符、鼠标按键修饰符,我们就对这三种修饰符进行详细的介绍。一、事件修饰符 首先,来看一下Vue.js为我们提供的事件修饰符有哪些吧。修饰符名称 作..原创 2021-05-10 11:24:30 · 508 阅读 · 0 评论 -
keydown,keypress,keyup三者之间的区别
keydown,keypress,keyup三者之间的区别下面是Js高级教程对三者的描述:keydown:当用户按下键盘上的任意键时触发,如果按住不放的话,会重复触发此事件;keypress:当用户按下键盘上的字符键时触发,如果按住不让的话,会重复触发此事件;keyup:当用户释放键盘上的字符键时触发。...原创 2021-05-10 11:10:36 · 381 阅读 · 0 评论 -
jsvascript符号的作用
typeof:验证数据类型 类型转换: parseInt(转换整数) parseFloat(转换小数)//这个小数整数都能显示 NaN和NaN不相等 (isNaN:判断是不是NaN) ?: (三目运算符 : 条件1?语句1:语句2): == (先转换类型,然后比较) === (不转换类型,直接比较) + (1、字符串连接2、数字相加) - (数字相减) % (取余数:12%5=2) += (等于加:i=1,i+=3,i=4) ++ (自增: i=1,i+...原创 2021-04-28 09:34:28 · 148 阅读 · 0 评论 -
true和false
原创 2021-04-25 11:00:16 · 428 阅读 · 0 评论 -
循环:Break(中断) 和 Continue(跳过)
Break:<p>带 break 的循环</p><p id="demo"></p><script>var text = "";var i;for (i = 0; i < 10; i++) { if (i === 3) { break; } text += "数字是 " + i + "<br>";}document.getElementById("demo").innerHTML = text;&.原创 2021-04-25 10:59:01 · 160 阅读 · 0 评论 -
ES6中的Map集合(与java里类似)
Set类型可以用来处理列表中的值,但是不适用于处理键值对这样的信息结构。ES6也添加了Map集合来解决类似的问题一、Map集合 JS的对象(Object),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制 为了解决这个问题,ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种原创 2021-03-29 21:10:02 · 169 阅读 · 0 评论 -
ES6中Set集合(与java里类似)
一、引入背景 Set集合是一种无重复元素的列表,开发者们一般不会逐一读取数组中的元素,也不太可能逐一访问Set集合中的每个元素,通常的做法是检测给定的值在某个集合中是否存在 Map集合内含多组键值对,集合中每个元素分别存放着可访问的键名和它对应的值,Map集合经常被用于缓存频繁取用的数据。在标准正式发布以前,开发者们已经在ES5中用非数组对象实现了类似的功能 ES6新标准将Set集合与Map集合添加到JS中。 在ES5中,开发者们用对象属性来模拟这两种集合let set = O原创 2021-03-29 21:06:23 · 317 阅读 · 0 评论 -
for循环和while的区别
一、循环的结构不同for循环的表达式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}。while循环的表达式为:while(表达式){循环体}。二、执行条件的判断方式不同for循环执行末尾循环体后将再次进行条件判断,若条件还成立,则继续重复上述循环,当条件不成立时则跳出当下for循环。while循环当满足条件时进入循环,进入循环后,当条件不满足时,执行完循环体内全部语句后再跳出(而不是立即跳出循环)。三、使用的目的不同for循环的目的是为了限制循环体的执行次数原创 2021-03-29 18:48:36 · 33053 阅读 · 1 评论 -
JavaScript数组与字符串常用方法总结!!!
先来一段代码引子:var str='hello world';alert(str.charAt(1));//通过下标查找值;alert(str.indexOf('w',3));//通过值查找字符串下标;没有找到返回-1;有两个参数(第二个参数可以没有,有的话是从这里开始查找);alert(str.charCodeAt('w'));//转化unicode编码;alert(String.fromCharCode(119));//把Unicode的编码变为具体的值alert(str.toUpper原创 2021-03-29 17:43:18 · 120 阅读 · 0 评论 -
数据类型
数据类型数值 文本 图形 音频 视频……number:js 不区分小数和整数 Number123 // 整数 123.11 //浮点数 123.e2 //科学计数法 -998 //负数 NaN // not a number Infinity // 表示这个熟悉无穷大逻辑运符&& 两个都为真,结果为真 || 其中一个为真,结果为真 ! 真即是假, 假即是真比较运算符 !!!!重要= == 等于(类型不一样 值一样 也会判断为true) =...原创 2021-03-29 12:35:08 · 199 阅读 · 0 评论 -
JS中的单引号和双引号
JS里面的单引号和双引号可以同时使用,但是要遵循一定的准则。最外面用了双引号了,那么里面就不能再用双引号了,因为引号是成双对的,浏览器读到一个双引号后,到第2个双引号时才算结束;同理,浏览器读到一个单引号后,必须要读到第二个单引号才算结束,单引号和双引号之间的字符串可以相加'af'+"bvvv"+'dd'输出 "afbvvvdd"还有一种情况,,这里的单引号也是字符串的一部分"<div class='con"+"tent'></div>"输出 "<d原创 2021-03-28 21:21:14 · 3263 阅读 · 0 评论 -
JS实现异步编程的4种方法
一、回调函数 这是异步编程最基本的方法。 假定有两个函数f1和f2,后者等待前者的执行结果。f1();f2();//如果f1是一个很耗时的任务,可以考虑改写f1,把f2写成f1的回调函数。function f1(callback){ setTimeout(function () { // f1的任务代码 callback(); }, 1000);}//执行代码就变成下面这样:f1(f2); 采用这种方式,我们把同步操作变原创 2021-03-26 21:30:22 · 5635 阅读 · 0 评论 -
函数变量和闭包真正理解
arguments 对象JavaScript 函数有个内置的对象 arguments 对象。argument 对象包含了函数调用的参数数组。通过这种方式你可以很方便的找到最大的一个参数的值:<!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body>&l.原创 2021-03-25 22:25:41 · 224 阅读 · 0 评论 -
JS 中构造函数和普通函数的区别
1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写2、构造函数和普通函数的区别在于:调用方式不一样。作用也不一样(构造函数用来新建实例对象)3、调用方式不一样。a. 普通函数的调用方式:直接调用 person();b.构造函数的调用方式:需要使用new关键字来调用 new Person();4、构造函数的函数名与类名相同:Person( ) 这个构造函数,Person 既是函数名,也是这个对象的类名5、内部用this 来构造属性和方法...原创 2021-03-24 09:35:54 · 2258 阅读 · 0 评论 -
函数的call()和apply()方法,作用与区别
每个函数都包含两个非继承而来的方法: apply()和 call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的值。首先, apply()方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是 Array 的实例,也可以是arguments 对象。function sum(num1, num2){return num1 + num2;}function callSum1(num1, num2){return sum.转载 2021-03-23 20:27:06 · 578 阅读 · 0 评论 -
数组的pop push unshift shift,slice和splice的区别,map方法以及parseInt函数
数组的pop push unshift shiftpop:删除末尾元素,返回删除的元素shift:删除首个元素,返回删除的元素push:末尾添加元素,返回数组长度unshift:首位添加元素,返回数组长度纯函数:不改变源数组(没有副作用),返回一个数组。以下是一些纯函数:some everyconst arr = [10,20,30,40];const arr1 = arr.concat([50,60,70]);//合并数组const arr2 = arr.map(num =&原创 2021-03-23 19:53:27 · 454 阅读 · 0 评论 -
创建项目npm报错 : 无法加载文件 D:\Program Files\nodejs\node_global\weex.ps1,因为在此系统上禁止运行脚本。
使用weex新建一个app,发现npm报错:npm : 无法加载文件 D:\Program Files\nodejs\node_global\weex.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。所在位置 行:1 字符: 1+ npm run dev+ ~~~ + CategoryInfo : Securi原创 2021-03-05 22:13:18 · 304 阅读 · 0 评论 -
常用git命令
常用的Linux命令平时一定要多使用这些基础的命令!1)、cd : 改变目录。2)、cd . . 回退到上一个目录,直接cd进入默认目录3)、pwd : 显示当前所在的目录路径。4)、ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。5)、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。6)、rm: 删除一个文件, rm index.js 就会把index.js文件删除。7..原创 2021-03-05 11:01:55 · 160 阅读 · 1 评论