![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
js
辉娜
这个作者很懒,什么都没留下…
展开
-
js数组去重的方法
let arr = [1, 1, 2, 3, 4, 4, 4, 3, 3, 6, 5]// 1.Set去重function unique(arr) { console.log(Array.from(new Set(arr)))}unique(arr) //[ 1, 2, 3, 4, 6, 5 ] // ------------------------------------ // 2. indexOf()去重function unique1(arr) { let.原创 2021-10-19 19:48:57 · 231 阅读 · 0 评论 -
Promise Generator Async初步理解(1)
一、立即执行函数// 立即执行函数function getInfo() { return 'I am Zhang';}function showInfo(param) { console.log(param)}showInfo(getInfo()) //I am Zhang二、回调函数//回调函数function callback(param) { console.log('我是回调函数', param);}function myFun(param原创 2021-10-17 22:59:41 · 82 阅读 · 0 评论 -
js的六种继承
// 父类function Father(name) { // 属性 this.name = name || 'father', // 实例方法 this.sleep = function() { console.log(this.name + "正在睡觉"); }}// 原型方法Father.prototype.look = function(book) { console.log(this..原创 2021-10-14 15:25:59 · 164 阅读 · 0 评论 -
ES6 解构和扩展字符串
完全解构 不完全解构 异常结构 数组let stus = ['zs', 'ls', 'ww', 'zs', 'ln']; //可以是某个模块导出的let nums = [1, [2, 3, [4, [5]]]];let [a, [b, c, [d, [e]]]] = nums //得想清楚结构console.log(a, b, c, d, e) // 1、完全解构 // let [name1, name2, name3,...原创 2021-10-12 14:42:06 · 104 阅读 · 0 评论 -
理解js的作用域和作用链
作用域(Scope)1. 什么是作用域作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。可能这两句话并不好理解,我们先来看个例子:function outFun2() { var inVariable = "内层变量2";}outFun2();//要先执行这个函数,否则根本不知道里面是啥console.log(inVariable); // Uncaught ReferenceError: inVariabl转载 2021-10-09 16:41:45 · 60 阅读 · 0 评论 -
js的this指向问题
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象情况一:全局作用域或者普通函数自执行中this指向全局对象windowconsole.log(this.document===document);//trueconsole.log(this===window);//truethis.a=37;//相当于创建了一个全局变量aconsole.log(window.a);//37...原创 2021-10-08 19:09:59 · 51 阅读 · 0 评论 -
Object方法大全
create 创建一个对象 defineProperty Object.defineProperty(object, prop, descriptor)定义对象属性 defineProperties Object.defineProperties(object, {prop1 : descriptor1, prop2 : descriptor2, ...) keys 遍历可枚举的属性,只包含对象本身可枚举属性,不包含原型链可枚举属性 values 遍历可枚举的属性值,只包含对象本身可枚举属性值,..转载 2021-10-06 09:49:02 · 90 阅读 · 0 评论 -
js遍历数组的五种方法+对象的六种方法
遍历对象:1.for...in遍历输出的是对象自身的属性以及原型链上可枚举的属性(不含Symbol属性),原型链上的属性最后输出说明先遍历的是自身的可枚举属性,后遍历原型链上的2.Object.keys()遍历对象返回的是一个包含对象自身可枚举属性的数组(不含Symbol属性).3.Objcet.getOwnPropertyNames()输出对象自身的可枚举和不可枚举属性的数组,不输出原型链上的属性4.Reflect.ownKeys()返回对象自身的所有属性,不管属性名是Symbo...原创 2021-10-05 21:23:58 · 859 阅读 · 0 评论 -
变量声明之有var和没有var的区别及call()、apply()、bind() 的用法
不用var声明的变量会被自动隐式的创建为全局变量 function fn(){ a = 2 } fn() console.log(a) //2 根据js的作用域,函数外面是无法获得函数里面的变量的(除非使用闭包),但是这里做到了,只是因为js会将没有使用var声明的变量自动的创建为全局变量。 从第一条也可以看出,没有使用var声明的变量是不会参与变量提升的,不然结果应该是undefined,看到最好的一个解释是:由于该变量没有使用.原创 2021-10-04 09:44:31 · 196 阅读 · 0 评论 -
理解IIFE 立即调用
为什么需要IIFE?如果只是为了立即执行一个函数,显然IIFE所带来的好处有限。实际上,IIFE的出现是为了弥补JS在scope方面的缺陷:JS只有全局作用域(global scope)、函数作用域(function scope),从ES6开始才有块级作用域(block scope)。对比现在流行的其他面向对象的语言可以看出,JS在访问控制这方面是多么的脆弱!那么如何实现作用域的隔离呢?在JS中,只有function,只有function,只有function才能实现作用域隔离,因此如果要将一段代码中的.原创 2021-10-03 21:58:38 · 101 阅读 · 0 评论 -
JS常见的事件
1. 点击事件:1. onclick:单击事件2. ondblclick:双击事件2. 焦点事件1. onblur:失去焦点2. onfocus:元素获得焦点。3. 加载事件:1. onload:一张页面或一幅图像完成加载。4. 鼠标事件:1. onmousedown鼠标按钮被按下。2. onmouseup鼠标按键被松开。...原创 2021-09-15 18:18:55 · 130 阅读 · 0 评论 -
JS数组常见方法
添加数组项 数组[长度] = 数据:向数组末尾添加一个数据 数组.push(数据): 向数组末尾添加一个数据 数组.unshift(数据):向数组起始位置添加一个数据,会导致数组每一项的下标向后移动 数组.splice(下标, 0, 添加的数据): 从指定下标位置开始,删除0个,然后在该位置插入添加的数据,如果下标超过范围,则按照范围的边界进行处理。 push、unshift、splice可以添加多个数据删除数据 delete 数组[下标]: 这种做法不会.原创 2021-09-15 17:23:53 · 50 阅读 · 0 评论 -
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡
第一部分:事件冒泡 即事件开始由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档)。 下面举一个简单的例子:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>bubble</title> <style> button{ background: r转载 2021-09-15 16:06:19 · 1797 阅读 · 0 评论 -
JS_内置对象及内置函数
一、正则表达式的创建// 创建正则表达式// 1.构造函数模式var reg1 = new RegExp('b'); //匹配一个字符串中是否含有字符b// 2、字面量var reg1_1 = /b/;var str = 'hello xiaobai';//测试是否有效// g global 全局// i ignore case 不区分大小写// m multiline 多行if (reg1.test(str)) { console.log('yes');...原创 2021-09-09 19:26:59 · 76 阅读 · 0 评论 -
JS_原型和原型链
一、prototype在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象。二、__proto__这是每个对象(除null外)都会有的属性,叫做__proto__,这个属性会指向该对象的原型。三、constructor每个原型都有一个constructor属性,指向该关联的构造函数。四、实例与原型当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。五、原型链简...转载 2021-09-09 17:17:41 · 56 阅读 · 0 评论 -
JS_函数
一、内部属性1.argumentsarguments是一个类数组对象,包含着传入函数中的所有参数。arguments对象还有一个callee的属性,用来指向拥有这个arguments对象的函数//递归累加function lj(n) { if (n <= 1) { return 1; } else { return n + arguments.callee(n - 1); }}console.lo...原创 2021-09-08 18:22:32 · 42 阅读 · 0 评论 -
js对象继承的方式-三种 +三种
一、原型链继承每个构造函数都有一个原型对象,原型对象中都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。当原型对象等于另外一个类型的实例即继承。缺点:如果某一个构造函数实例对象修改了原型对象上的属性值和方法,则也会影响其他实例对象//定义父构造函数类型 function Animal(){ this.name = "animal" } Animal.prototype = { sayName : function(){ cons原创 2021-09-08 17:16:28 · 835 阅读 · 0 评论 -
js 创建对象的方式--四种
(1)第一种是工厂模式,工厂模式的主要工作原理是用函数来封装创建对象的细节,从而通过调用函数来达到复用的目的。但是它有一个很大的问题就是创建出来的对象无法和某个类型联系起来,它只是简单的封装了复用代码,而没有建立起对象和类型间的关系。// 1.工厂模式// 区分不清对象和原型的联系function Dog(name, age) { var obj = new Object(); obj.name = name; obj.age = age; return obj;原创 2021-09-08 16:35:31 · 93 阅读 · 0 评论 -
JS数组_02_原型方法
一、栈和队列var arr = [1, 2, 4];// 栈和队列方法,会改变原数组//arr.push在末尾追加元素//arr.pop删除最末尾的那个元素// arr.unshift在第一项的前面放置元素// arr.shift删除第一项元素arr.push(100); //[ 1, 2, 4, 100 ]console.log(arr);arr.push(100); //[ 1, 2, 4 ]arr.pop(); //console.log(arr);arr.shift...原创 2021-09-07 15:15:15 · 57 阅读 · 0 评论 -
JS_数组01
一、数组的创建// 数组的创建----两种方法// 1.构造函数创建var arr1 = new Array();//var arr1 = new Array(5); //创建的时候指定长度,打印的时候会出现 <2 empty items> //arr1[0] = 'zhangs';arr1[1] = 'lisi';arr1[2] = 'wangw';console.log(arr1); //运行结果:[ 'zhangs', 'lisi', 'wangw' ]//...原创 2021-09-06 22:22:12 · 69 阅读 · 0 评论 -
JS工作原理与垃圾回收机制
原创 2021-09-06 19:15:56 · 81 阅读 · 0 评论 -
JS_对象
一、数据属性var obj = { name: 'zs', age: 12, sex: '男' } // 只能设置某一个对象中的【某一个】属性的原始属性Object.defineProperty(obj, 'name', { configurable: false, enumberable: false, writable: false, value: 'lisi'})console.log(ob..原创 2021-09-06 19:07:54 · 66 阅读 · 0 评论 -
JS中ValueOf和toString的区别
这两个方法都为对象的原始方法 valueof为对象的原始值,通常不会显示的调用,通常由Js自动在后台进行调用 toStrting本身的一个作用是做字符串的转换,也会进行自动调用 如果我们重写了这两个方法,在进行运算时,优先调用valueof,在进行显示时,优先调用toString 比如我们只量写了一个方法,那么无论是运算还是显示,都会调用该方法...原创 2021-09-01 10:53:23 · 172 阅读 · 0 评论 -
理解JS循环中的continue,break,label标签
1.break终止循环当j为5的时候,终止标签为j1的循环,即,j1循环只会执行到j=4的时候i1:for(vari=1;i<10;i++){j1:for(varj=1;j<20;j++){if(j==5)breakj1;console.log("i为"+i+",j为"+j);}console.log("--...原创 2021-08-30 13:01:44 · 309 阅读 · 0 评论 -
JS运算符和全局声明
三目运算符:全局块,只有有声明,自动提升var aConsole.log(a)Undenfied原创 2021-08-29 10:32:45 · 85 阅读 · 0 评论 -
JS02-数据类型
1、基础数据类型放在栈区,直接引用;引用数据类型放在堆区,通过栈区引用原创 2021-08-29 10:28:42 · 147 阅读 · 0 评论 -
JS中的深拷贝
第一种方法:var stu = obj ; //浅拷贝:使用的是同一个地址stu . age = 15 ;console . log ( obj . age );//深拷贝var stu2 = Object . assign ({}, obj ); //对象的合并;和一个空对象stu2 . sex = "女" ;console . log ...原创 2021-08-29 10:27:22 · 81 阅读 · 0 评论 -
如何使JS运行在文件底部
1.script引入外部文件放在body底部<body><div class="a"></div><script src="./a.js"></script></body>2.script放到顶部,加async ---------同时执行<head><script src="./a.js" async></script></head&...原创 2021-08-29 10:26:20 · 299 阅读 · 0 评论 -
JS -01-历史发展及地位
原创 2021-08-29 00:44:07 · 62 阅读 · 0 评论