
基础知识
文章平均质量分 68
墨语轩
这个作者很懒,什么都没留下…
展开
-
理解浏览器请求中的预检请求 preflight 类型
目的:浏览器在发送某些非简单请求(Non-Simple Request)前,自动发起一个 OPTIONS 方法的预检请求,检查目标服务器是否允许实际请求。请求方法非 GET/POST/HEAD(如 PUT、DELETE)。请求头包含非简单头(如 Authorization、Content-Type: application/json)。原创 2025-02-11 11:13:08 · 808 阅读 · 0 评论 -
js 继承由浅入深
JS 继承这里讨论几种常见的方式,循序渐进1.原型链继承 2.构造函数继承 3.组合继承 4.寄生组合继承一、原型链继承实现function Parent() { this.name = "parentName";}Parent.prototype.getName = function () { console.log(this.name);};function Child() {}// Parent的实例同时包含实例属性⽅法和原型属性⽅法,所以把new Parent()原创 2022-01-31 20:20:20 · 1054 阅读 · 0 评论 -
利用 JSON.stringify 深拷贝的弊端
深拷贝不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深拷贝的方法递归复制到新对象上。function deepClone(obj){ let obj_ = JSON.stringify(obj), loneObj = JSON.parse(obj_); return loneObj}let a=[1,2,3,4,[2,3,4]],b = deepClone(a);console.log(a,b);结果:弊端:1.如果 ob原创 2021-01-22 10:42:37 · 3008 阅读 · 0 评论 -
异或(^)运算规则及其应用
异或运算法则 1. a ^ b = b ^ a 2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c; 3. d = a ^ b ^ c 可以推出 a = d ^ b ^ c. 4. a ^ b ^ a = b.异或运算 1、异或是一个数学运算符。应用于逻辑运算。 2、例如:真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值相 异结果为真。 异或的运算方法是一个二进制运算: 1^1=0 0^0转载 2021-01-06 14:13:12 · 3115 阅读 · 0 评论 -
从零开始手写Promise
面试的时候经常会问到Promise的使用;有的面试官再深入一点,会继续问是否了解Promise的实现方式,或者有没有阅读过Promise的源码;今天我们就来看一下,Promise在内部是如何实现来链式调用的。什么是Promise所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。Promise出现之前都是通过转载 2020-12-16 16:30:09 · 248 阅读 · 0 评论 -
封装原生ajax
封装ajax//通过url获取数据_getData = ({ url, para={}, contentType, beforeSend, type="POST",}) => { console.log(para, 'para') if (!url) throw Error('the url is required'); return new Promise((resolve, reject) => { l原创 2020-11-18 16:54:58 · 123 阅读 · 0 评论 -
getComputedStyle获取元素及伪元素样式 ,currentStyle,setProperty,getPropertyValue
我们首先来看看 Element.currentStyle 吧,Element.currentStyle是一个与window.getComputedStyle 方法功能相同的属性。这个属性实现在旧版本的IE浏览器中。该特性是 非标准 的,请尽量不要在生产环境中使用它!兼容性:来详细了解getComputedStyleWindow.getComputedStyle() 方法返回一个...原创 2020-04-01 08:54:51 · 1776 阅读 · 0 评论 -
javascript事件委托(事件代理)
function bindEvent(elem,type,selector,fn){ if(!fn){ fn = selector; selector = null; } elem.addEventListener(type,function(ev){ if(selector){ let target...原创 2020-03-10 22:23:31 · 393 阅读 · 0 评论 -
从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
最近发现有不少介绍JS单线程运行机制的文章,但是发现很多都仅仅是介绍某一部分的知识,而且各个地方的说法还不统一,容易造成困惑。 因此准备梳理这块知识点,结合已有的认知,基于网上的大量参考资料, 从浏览器多进程到JS单线程,将JS引擎的运行机制系统的梳理一遍。展现形式:由于是属于系统梳理型,就没有由浅入深了,而是从头到尾的梳理知识体系, 重点是将关键节点的知识点串联起来,而不是仅仅剖析某一部分知...转载 2019-12-23 11:39:58 · 191 阅读 · 0 评论 -
js几种常见的继承方式
ES6博采众长终于原生实现了类(class)这个概念,当然他的继承也变得相对来说简单了,也是extends关键字即可如:class Person{ constructor(name,gender){ this.name = name; this.gender = gender; } changeName = (name)=>{ ...原创 2019-12-18 10:59:19 · 333 阅读 · 0 评论 -
Javascript中==的类型转换详解,JS中相等比较(==)强制类型转换详解
相等操作符相等和不相等---先转换在比较。全等和不全等---仅比较而不转换相等==和不相等!=这两个操作符都会先转换操作数(通常称为强制转型),然后再比较他们的相等性。在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则:如果由一个操作数是布尔值,则在比较相等性之前先将其转换为数值---false转换为0,而true转换为1; 如果一个操作数是字符串,另一个操作数是数值,在...原创 2019-09-16 15:26:17 · 1343 阅读 · 0 评论 -
JSON.stringify和JSON.parse参数详解
JSON.stringify()JSON.stringify()方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以选择性的替换值,或者如果指定了replacer是一个数组,可选择性的仅包含数组指定的属性。JSON.stringify(value[, replacer [, space]])参数:value,...原创 2019-09-02 14:50:45 · 2150 阅读 · 0 评论 -
javascript中的this指向(二)
继续上一节内容1、判断 this现在我们可以根据优先级来判断函数在某个调用位置应用的是哪条规则。可以按照下面的顺序来进行判断:1.函数是否在 new 中调用(new 绑定)?如果是的话 this 绑定的是新创建的对象。 var bar = new foo();2.函数是否通过 call,apply(显式绑定)或者硬绑定调用?如果是的话,this 绑定的是指定的对象。 var bar = foo.call(obj2);3.函数是否在某个上下文对象中调用(隐式绑定)?如果...原创 2020-05-25 09:00:58 · 238 阅读 · 0 评论 -
javascript中的this指向(一)
JS的this指向是有点迷惑的,在不同环境中,不同调用方式下指向都有区别,但是JS中this指向最简单的记忆方法便是 this 指向是由调用者的调用方式决定的。其实this的调用方式只有四种情况:由call,apply,bind强制绑定this到目标对象 由 new 创建对象时,this指向新创建的对象 由对象调用,例如 obj.fn(),this指向调用对象 在全局作用域下调用,直...原创 2020-05-22 09:07:26 · 275 阅读 · 0 评论 -
eval 和 with 详解
欺骗词法如果词法作用域完全由写代码期间函数所声明的位置来定义,怎样才能在运行时来 ”修改“(也可以说是欺骗)词法作用域呢?JavaScript 中有两种机制来实现这个目的。社区普遍认为在代码中使用这两种机制并不是好主意。但是关于它们的争论通常会忽略掉最重要的点:欺骗词法作用域会导致性能下降。evalJavaScript 中的 eval(..) 函数可以接收一个字符串为参数,并将其中的内容视为好像在书写时就存在于程序中这个位置的代码。话句话说,可以在你写的代码中用程序生成代码并运行运行,就好像原创 2020-05-20 09:03:28 · 584 阅读 · 0 评论 -
浏览器缓存:强缓存协商缓存
缓存策略的分类:强缓存 协商缓存缓存策略都是通过 http header 来实现的。浏览器每次发起请求,都会现在浏览器中查找该请求的结果以及缓存标识。浏览器每次拿到请求的结果,都会将该结果和缓存标识存入浏览器缓存中。一、强缓存强缓存:不会向服务器发起请求,直接从缓存中读取数据,在 chrome 控制台的 Network 选项中可以看到该请求返回 200 状态码,并且 Size 显示 from disk catch 或 from memory cache。强缓存可以设置两种 HTTP原创 2020-05-19 09:11:00 · 603 阅读 · 0 评论