javascript
文章平均质量分 57
javascript
Goodbye_yesterday
湖北大学计科18级
展开
-
Eventloop
众所周知JS是门非阻塞单线程语言,因为最初JS就是为了和浏览器交互而诞生的。如果JS是门多线程的语言的话,我们在多个线程中处理DOM就可能会发生问题JS在执行的过程中会产生执行环境,这些执行环境会被顺序的加入到执行栈中。如果遇到异步的代码,会被挂起并加入的Task队列中...原创 2021-01-22 12:25:17 · 140 阅读 · 0 评论 -
简单promise的实现
在实现promise之前,先简单的回顾一下promisePromise 对象有以下两个特点:1、对象的状态不受外界影响。Promise 对象代表一个异步操作,有三种状态:pending: 初始状态,不是成功或失败状态。 fulfilled: 意味着操作成功完成。 rejected: 意味着操作失败。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是「承诺」,表示其他手段无法改变。2、一旦状态改变,就不.原创 2021-01-21 16:46:25 · 309 阅读 · 0 评论 -
js的几种继承方式
首先先来讲下,其实在JS中并不存在类,class只是语法糖,本质还是函数class Person {}Person instanceof Function // true组合继承function Parent(value) { this.val = value}parent.prototype.getValue = function() { console.log(this.val);}function Child(value) { Parent.cal原创 2021-01-16 20:18:18 · 201 阅读 · 0 评论 -
深浅拷贝
1.数据类型数据分为基本数据类型(String,Number,Boolean,Null,Undefined, Symbol)和对象数据类型基本数据类型的特点:直接存储在栈中对象数据类型的特点:存储的是该对象在栈中的引用,真实的数据存放在堆内存中(栈中只存在对象的引用,真正的对象在堆中)2.浅拷贝与深拷贝的区别浅拷贝只复制某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存深拷贝复制完整的对象,不共享内存空间1.浅拷贝方法一:Object.assign()let原创 2021-01-07 21:14:25 · 98 阅读 · 0 评论 -
自己实现js中的new 和 instanceof
new的作用新⽣成了⼀个对象 链接到构造函数的原型 绑定 this 返回新对象function new() { let obj = new Object(); let Con = [].shift.call(arguments); obj.__proto__ = Con.prototype let result = Con.apply(obj,arguments); return typeof result === 'object' ? resu.原创 2020-09-24 09:00:03 · 151 阅读 · 0 评论 -
js 原型
每个函数都有 prototype 属性,除了 Function.prototype.bind() ,该属性指向原 型每个对象都有 __proto__ 属性,指向了创建该对象的构造函数的原型。其实这个属性指 向了 [[prototype]] ,但是 [[prototype]] 是内部属性,我们并不能访问到,所以使 ⽤ _proto_ 来访问对象可以通过 __proto__ 来寻找不属于该对象的属性, __proto__ 将对象连接起来组 成了原型链 ...原创 2020-09-24 08:31:53 · 156 阅读 · 0 评论 -
异步: 现在与将来
回调函数ajax请求ajax("http://some.url.1", function myCallbackFunction(data) { console.log( data );});事件循环var eventLoop = [ ];var event;while(true) { //一次tick if(eventLoop.length > 0){ event = eventloop.shift(); tr..原创 2020-09-22 17:57:26 · 132 阅读 · 0 评论 -
ES6 解构
ES6引入了一个新的语法特性,名为解构,把这个功能看作是一个结构话赋值方法,可能会容易理解一些以下代码就展示了手动的解构赋值function foo() { return [1,2,3];}var tmp = foo(), a = tmp[0], b = tmp[1], c = tmp[2];console.lof( a, b, c ); // 1,2,3...原创 2020-09-20 10:56:03 · 156 阅读 · 0 评论 -
ES6 ... 运算符
ES6引入了一个新的运算符 ... 通常称为spread/rest(展开或收集)运算符,取决于它在哪使用function foo(x,y,z) { console.log( x, y, z );}foo( ...[1,2,3] ); 当 ... 用在数组之前时(实际上是任何 iterable (可迭代的)),它会把这个变量展开为各个独立的值。var a = [2,3,4];var b = [ 1, ...a, 5]console.log( b ); //[1,...原创 2020-09-19 19:36:01 · 181 阅读 · 0 评论 -
牛客 Js43 获取指定字符串
给定字符串 str,检查其是否包含 连续3个数字1、如果包含,返回最先出现的 3 个数字的字符串2、如果不包含,返回 false这道题是一道正则表达式的题,但其中的一些js语法却让我觉得收获颇多function captureThreeNumbers(str) { var reg = /(\d{3})/; var arr = str.match(reg); return (arr && arr[0]) || false;}reg 时正则表达式.原创 2020-08-18 21:43:08 · 179 阅读 · 0 评论 -
javascript中的 || 和 &&
在其他的语言中 || 和 && 返回的是bool值,但在js中他们的返回值却是两个操作数中的其中一个var a = 42;var b = "abc";var c = null;a || b; //42a && b; //"abc"c || b; //"abc"c && b; //null对于 || 来说,如果条件判断结果为 true就返回第一个操作数,false的话就返回第二个操作数b的值。对于 &&原创 2020-08-10 11:08:13 · 244 阅读 · 0 评论 -
js对旧版本支持的两种方法polyfilling 与 transpiling
polyfill这个单词表示根据新特性的定义,创建一段与之等价但能在旧的js环境中运行的代码。举例来说,ES6定义了一个名为Number.isNaN(..) 的工具,用于提供一个精准无bug的NaN值检查,取代原来的isNaN(..)if(!Number.isNaN) { //如果Number没有isNaN的话,那么下面就会进行Number.isNaN的定义 Number.isNaN = function isNaN(x) { return x !== x; }原创 2020-08-03 15:41:59 · 711 阅读 · 0 评论 -
数组扁平化处理
数组扁平化:多维数组转成一维数组function flatten(arr) { var result = [] for (var i = 0; i < arr.length; i++){ console.log(arr[i]); if(Array.isArray(arr[i])) { //如果是数组的话 result = result.concat(flatten(arr[i])) //递归 } el原创 2020-07-12 16:29:31 · 234 阅读 · 0 评论 -
js强制类型转换
1.值类型转换var a = 42;var b = a + ""; //隐式强制类型转换var c = String( a ); //显式强制类型转换2.抽象值操作1.ToString(),负责处理非字符串的强制类型转换基本类型值的字符串化规则为: null转换为"null",undefined转换为"undefined",true转化为”true",数字的字符串化则遵循通用规则var a = 1.07 * 1000 * 1000 * 1000 * 1000 * 100.原创 2020-07-06 22:06:46 · 254 阅读 · 0 评论 -
javascript原生函数
常用的内建函数:String()Number()Boolean()Array()Object()Function()RegExp()Date()Error()Symbol()构造函数创建出来的是封装了基本类型值的封装对象var a = new String( "abc" );typeof a; //"object"a instanceof String; //trueObject.prototype.toString.cal原创 2020-07-05 10:22:15 · 431 阅读 · 0 评论 -
javascript中的内置值类型
1.数组var a = [ 1, "2" , [3]];a.length; //3a[0] === 1; //truea[2][0] === 3; //true创建稀疏矩阵,中间会留有一些空白单元,值为undefinedvar a = [ ];a["13"] = 42;a.length; //14从0到12的值都为undefined类数组function foo() { var arr = Array.prototype.sl原创 2020-07-04 16:09:32 · 890 阅读 · 0 评论 -
行为委托
1.委托理论委托行为意味着某些对象在找不到属性或方法引用时会把这个请求委托给另外一个对象。这是一种极其强大的设计模式,和父类,子类,继承,多态等概念完全不同,这种模式不是由父类到子类的垂直关系所组织的,而是由可以向任意方向委托并联组织的...原创 2020-07-03 11:41:29 · 204 阅读 · 0 评论 -
javascript中原型的理解
1.[[prototype]]var anotherObject = { a:2};var myObject = Object.create(anotherObject);myObject.a; //2Object.create(...)会创建一个关联到anotherObject的对象,尽管myObject中并没有a属性,但是顺着原型链找到了anotherObject的a属性属性的遍历...原创 2020-07-01 11:25:12 · 146 阅读 · 0 评论 -
javascript中的对象
1.语法对象可以通过两种形式定义:声明形式和构造形式声明形式var myObj = { key: value};构造形式var myObj = new Object();myObj.key = value;2.类型stringnumberbooleannullundefinedobject3.内置对象StringNumberBooleanObjectFunctionArrayDate (日期)RegExp..原创 2020-06-27 22:57:12 · 163 阅读 · 0 评论 -
javascript中的this的理解
每个函数的this是在调用时被绑定的,完全取决于函数调用的位置!!!!1.this的绑定规则(1)默认绑定function foo(){ console.log( this.a );}var a = 2;foo();函数没有任何修饰进行调用的,所以在默认情况下会直接将this绑定到全局空间。但这只是在非严格模式下是这样的,严格模式下,this将会是undefined(2)隐式绑定function foo() { console.log(this.a);.原创 2020-06-26 14:19:26 · 227 阅读 · 0 评论 -
闭包的理解
function foo() { var a = 2; function bar() { console.log( a );} return bar;}var baz = foo();baz();在foo执行完毕后,将返回值bar赋值给baz,使得bar能在自己的词法作用域之外执行。通常情况下,foo执行后,引擎会考虑释放foo的内存空间,但因为bar在foo内部,所以该作用域可以存活,bar()依然拥有该作用域的引用,而这个引用就叫做闭包。.原创 2020-06-25 15:30:05 · 183 阅读 · 0 评论 -
javascript预编译
js运行三部曲1.语法分析2.预编译3.解释执行imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象GO所有一切声明的全局变量,全是window的属性预编译发生在执行之前,且预编译执行的地方不会在执行函数预编译1.创建AO对象2.找形参和变量声明,将形参和变量作为AO属性名,值为undefined3.形参值和实参值相...原创 2020-02-28 14:46:06 · 233 阅读 · 0 评论 -
firefox控制台打开方法
打开firefox最右侧的打开菜单点击web开发者点击查看器再点击控制台,就进入控制台了控制台的作用十分强大可以十分方便的查看javascript中的各种结果,而不必运行...原创 2020-02-28 14:16:51 · 2961 阅读 · 0 评论