JS
旅行家小二
本人发布的文章仅用于记录个人技术难点,别嫌我菜乱喷
展开
-
手写实现一个new?
【代码】手写实现一个new?原创 2023-01-31 11:16:10 · 130 阅读 · 0 评论 -
js树形结构数据过滤?
js菜单树形结构数据过滤原创 2022-09-08 17:47:14 · 211 阅读 · 0 评论 -
继承的几种方式?
https://www.cnblogs.com/loving0606/p/14086787.html转载 2022-04-28 10:18:52 · 54 阅读 · 0 评论 -
判断一个函数是函数?
1、typeof 缺点就是当判断对象为null时,无法区分是null还是object2、Object.prototype.toString.call()原创 2022-03-16 15:25:52 · 129 阅读 · 0 评论 -
js下载流文件?
export default function(content, fileName) { const blob = new Blob([content]); const a = document.createElement("a"); const url = window.URL.createObjectURL(blob); const filename = fileName; a.href = url; a.download = filename; a.click(); .原创 2022-02-07 15:00:25 · 629 阅读 · 0 评论 -
es6的咱开运算符是深拷贝还是浅拷贝?
两种情况1、若内部元素为普通数据类型为深拷贝 let arr = [1,2,3,4] let arr2 = [...arr] arr[0] = '修改' console.log(arr) //['修改', 2, 3, 4] console.log(arr2) //[1, 2, 3, 4]2、若内部元素为复杂数据类型为浅拷贝 let arr = [ {原创 2022-01-14 09:33:57 · 354 阅读 · 0 评论 -
target、currentTarget的区别?
target 当前触发事件的元素currentTarget 当前绑定事件的元素原创 2021-12-31 13:42:00 · 71 阅读 · 0 评论 -
判断2个对象中的值的大小?
let arr = [{a: 1, b: '东边'}, {a: 2, b: '南边'}];// 比较最小值const min = Math.min.apply(Math, arr.map(ele=>{return ele.a})); // 1// 比较最大值const max = Math.max.apply(Math, arr.map(ele=>{return ele.a})); // 2转载 2021-10-27 17:16:16 · 177 阅读 · 0 评论 -
原型和原型链?
原型:在javascript中,每个函数都有一个prototype,它是一个指针,指向该函数的原型对象,我们可以在prototype上定义公共的属性和方法,这些属性和方法相对于该函数的实例化对象都是可见的。原型链:首先要了解__proto__,__proto__是对象独有的属性,他指向该对象的原型,获取这个对象的属性或方法,如能直接拿到则返回,若拿不到会向该对象的__proto__上查找(也就是父级),一直到Object,这种链式查找关系就是原型链...原创 2021-10-20 21:52:22 · 46 阅读 · 0 评论 -
阻止事件冒泡和阻止默认行为?
event.stopPropagation() 阻止事件冒泡event.preventDefault() 阻止默认行为原创 2021-05-21 16:13:05 · 39 阅读 · 0 评论 -
delete?
delete删除数组某个值,数组长度不变,会将删除的值变成undefined。delete同样可以删除对象原创 2021-05-21 09:45:11 · 33 阅读 · 0 评论 -
for in 和for of的区别?
1、for in遍历数组得到的是索引,for of得到的是value值2、for in遍历json得到的是key值,for of无法遍历json3、for in会遍历自定义属性,for of不会原创 2021-05-18 11:53:36 · 56 阅读 · 0 评论 -
判断数据类型的方式?
1、typeof ,缺点:当判断值为null,无法区分返回的是null还是object2、instansof3、Object.prototype.toString().call()原创 2021-05-14 16:17:41 · 40 阅读 · 0 评论 -
如何判断一个json对象有没有某个key?
{name:'李四'}.hasOwnProperty("name") //返回true{}.hasOwnProperty("name") //返回false原创 2020-11-23 13:56:04 · 1184 阅读 · 0 评论 -
splice用法?
用于向数组里添加、删除、替换项目,然后返回被删除的项目let source=[‘zhangshan’,‘lishi’,‘wanger’,];source.splice(1,source.indexOf('lishi'));console.log('新数组是:',source);原创 2020-10-30 09:10:42 · 124 阅读 · 0 评论 -
http协议和https协议的区别?
1、http是以明文方式传输,相对于不安全2、https在http的基础上增加了SSL协议,使用加密方式传输3、https需要到ca申请证书,因而需要一定费用4、http和https是两种不同的传输方式,端口也不同,前者是80,后者是443...原创 2020-09-01 12:52:27 · 88 阅读 · 0 评论 -
call、apply和bind的区别?
1、三者都是用来改变函数上下文,也就是this指向2、call、apply、bind第一个参数都是要指向的对象,第二个是要传递的参数3、call和apply写法不同,call后面是字符串格式,apply为数组格式4、bind返回一个函数,需要主动调用,call、apply会自动执行...原创 2020-09-01 11:04:25 · 89 阅读 · 0 评论 -
mvvm理解?
1、Model代表数据模型,负责数据和业务逻辑2、View代表UI视图,负责数据的展示3、ViewModel负责监听Model中数据的改变并且控制视图的更新,处理用户交互操作Model和View之前并无直接联系,而是通过ViewModel进行联系,Model和ViewModel之间有着双向数据绑定的关系,因此当Model数据改变会触发View层刷新,View层由于用户操作改变数据也会在Model中更新...转载 2020-08-21 10:23:32 · 149 阅读 · 0 评论 -
事件代理?
事件代理(Event Delegation),又称之为事件委托。是 JavaScript 中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能。...原创 2020-08-20 20:04:01 · 116 阅读 · 0 评论 -
如何H5新标签兼容低版本浏览器?
一、IE8/IE7/IE6支持通过document.方法创建的新标签,利用这点可以优化兼容问题二、使用html5shim框架 <!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]-->...翻译 2020-08-20 19:47:29 · 235 阅读 · 0 评论 -
闭包的理解?
函数外部访问函数内部的值,正常方式获取不到,只能在函数内部再定义一个函数,再将这个函数返回出去,外部即可获取到函数内部的值 优点:可以定义私有变量,避免变量名冲突 缺点:闭包中的变量会永久保存在内存中,可能会造成内存泄露 function sayHello(name) { var text = name; // 局部变量text var say = function () { console.log(text); ..原创 2020-08-20 12:58:43 · 86 阅读 · 0 评论 -
BOM和DOM?
BOM 浏览器对象模型,用来获取或设置浏览器的属性和行为,例如获取浏览器宽高、打开一个新窗口DOM 文档对象模型,用来获取设置文档中标签的属性,例如获取input的value值、获取元素宽高原创 2020-08-18 11:23:37 · 64 阅读 · 0 评论 -
创建ajax过程?
一 创建一个XMLHttpRequest对象,也就是异步调用对象二 创建一个新的http请求,并指定请求方式、url、验证信息三 设置响应http状态变化的函数四 发送http请求五 获取返回的数据原创 2020-08-18 09:14:39 · 136 阅读 · 0 评论 -
如何解决前端跨域问题?
方式一script标签跨域:这是由于script不受同源策略的限制缺点:只能够get单向请求,无法获取服务端返回的数据方式二JSONP跨域:也是利用script标签天生可以跨域的原理缺点:只能够get请求,不能注册success error函数,安全系数不高方式三CORSCross-Origin Resource Sharing(跨域资源共享),服务端要增加以下响应头 Access-Control-Allow-Origin: * Access-Control-Allow-Metho转载 2020-08-18 07:44:00 · 111 阅读 · 0 评论 -
通过addEventListener添加事件?
let myDom=document.getElementById('myClick'); myDom.addEventListener('click',function(){ console.log(this); },true); //括号内首先写事件名 //所执行的函数体 //事件捕获阶段执行(true),事件冒泡阶段执行(fal...原创 2020-08-17 11:26:03 · 253 阅读 · 0 评论 -
ES6中set和get方法?
CLASS类里面可以设置getter和setter方法,getter可以获取一些方法,setter可以设置一些方法。 class fun{ constructor(){ this.arr=[]; } get menu(){ return this.arr; } set menu(value){ this.arr.push(value); } } let p转载 2020-07-23 15:56:09 · 771 阅读 · 0 评论 -
ES6 filter、map、find、some、every方法?
1、forEach():主要用于循环遍历数组,不会返回新对象,运行无法中止,无法链式调用。2、 filter(): 主要用于筛选过滤数组,返回符合筛选条件的数据,不会改变原数组。3、map():主要用于循环遍历数组,也可以根据某些条件筛选数据,不会改变原数组。4、find(): 主要用于查找数组的数据,只要查找到一条符合条件的数据,直接返回,不会再继续查找下去。没有找到符合条件的数据返回undefined。5、some():用于检测数组中的元素是否满足指定条件,若任意一项满足则返回true,转载 2020-07-21 11:24:34 · 152 阅读 · 0 评论 -
var、let、const的区别?
1、var 会变量提升2、let 和 const存在块级作用域3、const声明了必须赋值4、const声明的变量不能修改、若为数组,可以push,若为json可以通过.添加属性5、var 允许声明多个相同变量,let 一个作用域只能声明一个6、var声明的全局变量作为window的属性,let,const不是...原创 2020-07-03 11:17:52 · 58 阅读 · 0 评论 -
构造函数?
通过new实例化对象的函数就是构造函数构造函数的执行步骤:1、this绑定初始化的对象2、this上添加属性和方法3、return修改后的对象原创 2020-07-03 10:41:38 · 82 阅读 · 0 评论 -
JS...扩展运算符?
//扩展运算符 let obj = { aaa: 12, bbb: 13 } let obj2 = { ccc: 14, ddd: 15 } let newJson={...obj,...obj2} console.log(newJson);//{aaa: 12, bbb: 13, ccc: 14, ddd: 15}原创 2020-07-02 17:26:52 · 103 阅读 · 0 评论 -
Object.assign?
数组去重加合并 let arr=[1,2,3,3,3,3]; let arr2=[1,2,3,3,3,9]; console.log(Object.assign(arr,arr2));//[1, 2, 3, 3, 3, 9]原创 2020-07-02 17:18:10 · 103 阅读 · 0 评论 -
JS里includes的作用?
判断一个数组里有没有某一项 let arr=[1,2,3,4,5,5,'ww'] console.log(arr.includes('ww')); //true原创 2020-07-02 17:06:42 · 909 阅读 · 0 评论 -
JS数组去重?
let arr=[1,2,3,3,3,3,4] let new_Arr=Array.from(new Set(arr)); console.log(new_Arr);原创 2020-07-02 15:45:34 · 58 阅读 · 0 评论 -
常用校验正则表达式?
1.验证自然数: /^(([0-9]*[1-9][0-9]*)|(0+))$/2.手机号: /^((13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])+\d{8})$/3.英文字符: /^.[A-Za-z]+$/4.座机: /^\d{3}-\d{7,8}|\d{4}-\d{7,8}$/5.银行卡号: /^[1-9]\d{9,19}$/6原创 2020-07-02 15:41:59 · 170 阅读 · 0 评论 -
ES6提供的异步编程?
1、单个用法 new Promise(function(resolve,reject){ setTimeout(function(){ resolve() },2000); }).then(function(res){ console.log('成功'); }).catch(function(res){ console.log('失败原创 2020-07-02 15:33:47 · 64 阅读 · 0 评论 -
JS对象深拷贝?
例如 let obj={aaa:12}; let copy=JSON.parse(JSON.stringify(obj)); console.log(copy);原创 2020-07-01 16:31:21 · 77 阅读 · 0 评论 -
js获取时间戳?
1、第一种(精确到秒) Data.parse(new Data);2、第二种 (new Date()).valueOf();3、第三种 new Date().getTime();原创 2020-07-01 16:23:29 · 97 阅读 · 0 评论 -
关于this指向?
1、默认指向window2、有事件源的指向事件源3、对象里的this指向对象本身4、构造函数里的this指向构造函数本身5、箭头函数中的this指向函数创建时所在作用域的环境怎么理解最后一句话: let obj={ aaa:12, fun2:function(){ console.log(this); //this指向obj } } obj.fu原创 2020-06-30 18:20:11 · 68 阅读 · 0 评论 -
JS基本数据类型?
string、object、number、boolean、function、以及ES6新增Symbol原创 2020-06-30 17:32:40 · 73 阅读 · 0 评论 -
for循环和forEach?
1.for循环可以通过return或break跳出循环,forEach无法跳出循环 可以跳出循环 for (let i = 0; i < 10; i++) { if (i == 2) { break } console.log(i); }2.forEach若想跳出循环请用Array.some(return true)或Array.every(return f原创 2020-06-30 16:09:36 · 61 阅读 · 0 评论