深入__proto__和prototype的区别和联系-编程思维

前话 有一个一个装逼的同事,写了一段代码 function a(){} a.__proto__.__proto__.__proto__ 然后问我,下面这个玩意a.__proto__.__proto__.__proto__是啥,然后我一脸懵逼,prototype还知道一点,这个__proto__,还来三个,是个什么鬼。于是我一直不能放下这个问题,虽然我很懒,很不喜欢费脑子,但是这个坎还是过不去,

前端安全--csrf攻防-编程思维

CSRF 流程 CSRF攻击有着如下的流程: 受害者登录a.com,并保留了登录凭证(Cookie)。 攻击者引诱受害者访问了b.com。 b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会… a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。 a.com以受害者的名义执行了act=xx。 攻击完成,攻击者在受害者不知情的

【垃圾回收】v8引擎垃圾回收机制-编程思维

在一些数据不被需要的时候,它就是垃圾数据,垃圾数据占用的内存就应该被回收,以释放有限的内存空间 不同语言的垃圾回收策略 通常情况下,垃圾数据回收分为手动回收和自动回收两种策略。 如 C/C++ 就是使用手动回收策略,何时分配内存、何时销毁内存都是由代码控制的,你可以参考下面这段 C 代码: // 在堆中分配内存 char* p = (char*)malloc(2048); // 在堆空间中分

【缓存策略及实践】前端如何配置 http 缓存机制 -编程思维

缓存的目的 主要作用是可以加快资源获取速度,提升用户体验,减少网络传输,缓解服务端的压力。 强缓存 不需要发送请求到服务端,直接读取浏览器本地缓存,显示的 HTTP 状态码是 200 ,强缓存又分为 Disk Cache (存放在硬盘中)和 Memory Cache (存放在内存中),存放的位置是由浏览器控制的。是否强缓存由 Expires、Cache-Control 和 Pragma 3 个

【浏览器缓存】有关浏览器缓存整理-编程思维

本地存储小容量 cookie 1)http是一种无状态的协议,所以每次客户端请求服务器的时候都是'初次见面',所以每次接收用户请求时,都是无法确定用户的身份, 2)为了解决这个无状态问题,会在登录成功时,服务端再响应头中存储着cookie信息服务端给用户下发cookie的数据(假设是一张小票), 3)等以后用户再请求服务端时,带着小票一起发送过去(自动),服务端检测小票的信息即可判断这个用户使用

【前端调试】- 借助performance分析并优化性能-编程思维

欢迎阅读本系列其他文章 【前端调试】- 更好的调试方式 VSCode Debugger 【前端调试】- 断点调试的正确打开方式 介绍 首先简单过一下Performance的使用,打开网页点击控制台Performance,录制5s的数据 其中 Main 这部分就是网页的主线程,也就是执行 Event Loop 的部分: 灰色就代表宏任务 task(这里带了红色是因为在 Performance

【前端调试】- 更好的调试方式 vscode debugger-编程思维

用 VSCode 打开项目目录,创建 .vscode/launch.json 文件或者点击调试窗口: 点击添加配置可以生成默认的配置 runtimeExecutable: 可以指定对应的浏览器,路径是你浏览器安装的位置 url: 把访问的 url 改为开发服务器启动的地址 进入调试窗口,点击启动: 可以看到浏览器在新窗口打开了项目 在项目代码打上断点 点击重启 项

minyachan的学习日常-编程思维

在 ES6 出现之前,js 定义变量的关键字只有 var。 在 ES6 之后才新增了 let 和 const。新的变量声明关键字出现,也带来了一些新的变化。Enjoy it :)var在 ES6 出现以前, JavaScript 定义变量的关键字只有 var声明作用域使用 var 操作符定义的变量,会成为包含它的函数的局部变量,这意味着该变量会在函数退出的时候被销毁。function foo()

前端基础(1)_html入门_葛老头-编程思维

1.概述 HTML入门知识图谱   什么是HTML 大名:Hyper Text Markup Language 寓意:超文本  标记  语言   HTML文件结构 HTML常用转义字符 转义字符注意点 1、转义字符各字符之间不能出现空格。2、转义字符必须以";“结束。3、单独的”&"不被认为是转义字符的开始。4、转义字符区分大小写。 2.常用标签 2.1.字体标签 2.2.段落标签

前端基础(5)_javascript入门_葛老头-编程思维

前言 首先赘述一下,这篇笔记是入门课程,很基础的。术业专攻,没必要学的太深,学多了,你不用最后还是会忘记,浪费这时间没必要,个人感觉非前端人士掌握以下js常识基本够用了。 1.概述及第一个js程序 1.1.JS简介 JS是一种脚本语言 不需要进行安装 页面如何使用JS的方法  Js变量是弱类型,定义的时候不用声明变量类型,赋值的时候声明变量类型。  Js调试 1.2.第一个js

面试说:聊聊javascript中的数据类型_前端gopal-编程思维

前言 请讲下 JavaScript 中的数据类型? 前端面试中,估计大家都被这么问过。 答:Javascript 中的数据类型包括原始类型和引用类型。其中原始类型包括 null、undefined、boolean、string、symbol、bigInt、number。引用类型指的是 Object。 没错,我也是这么回答的,只是这通常是第一个问题,由这个问题可以引出很多很多的问题,比如 N

proxy api学习 - 编程思维

handler.apply(target, thisArg, argumentsList)用于拦截函数的调用。target:目标对象(函数)。thisArg:被调用时的上下文对象。argumentsList:被调用时的参数数组。apply方法可以返回任何值。如果违反了以下约束,代理将抛出一个TypeError:target必须是可被调用的。也就是说,它必须是一个函数对象。handler.const

javascript之this - 编程思维

this是在运行时绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。当一个函数被调用时,会创建一个活动记录(有时也称为执行上下文)。这个记录会包含函数在哪里被调用(调用栈)。函数的调用方式、传入的参数等信息。this就是这个记录的一个属性,会在函数执行的过程中用到。默认绑定独立函数调用,无法应用其它规则时的默认规则

javascript之变量提升 - 编程思维

提升提升现象的出现,是因为代码在运行前,引擎会先进行编译。这个过程就好像变量和函数声明从它们在代码中出现的位置被“移动”到了最上面。准则只有声明本身会被提升,而赋值或其他运行逻辑会留在原地。每个作用域都会进行提升操作。函数声明会被提升,但是函数表达式却不会被提升。函数声明和变量声明都会被提升,是函数会首先被提升,然后才是变量。let和const进行的声明不会在块作用域中进行提升。例子示例1cons

javascript之原型 - 编程思维

[[Prototype]]JavaScript中的对象(函数也是对象)有一个特殊的[[Prototype]]内置属性,所谓的原型链就是由它“链”起来的。属性查找当引用对象的属性时会触发[[Get]]操作,可以理解为会执行[[Get]](),其逻辑是先查找当前对象是否存在该属性,如果存在就使用它。否则就去递归遍历,查找[[Prototype]]属性所引用的对象中是否存在要查找的属性,如果找到则返回,

javascript之类型转换 - 编程思维

强制转换强制转换主要指使用Number、String和Boolean三个函数,手动将各种类型的值,分布转换成数字、字符串或者布尔值。Number()使用Number函数,可以将任意类型的值转化成数值。下面分成两种情况讨论,一种是参数是原始类型的值,另一种是参数是对象。(1)原始类型值原始类型值的转换规则如下。// 数值:转换后还是原来的值 Number(324) // 324 // 字符串:如果

实用的js 技巧之——空值合并运算符、gloabalthis - 编程思维

前言ES语法并不是一成不变的,从最初的ES5已经到ES12了,了解语言的新特性,可以简化我们的代码写法或者更高效的实现我们的诉求,今天主要介绍以下两个常用的特性: 空值合并运算符、globalThis。空值合并运算符当遇到某个属性是空值时需要给默认值的操作,来看一下我们之前的实现:const opt = {} const configValue = opt.value|| 'default val

了解symbol - 编程思维

symbol 是一种基本数据类型 (There are 7 primitive data types: string, number, bigint, boolean, undefined, symbol, and null.)Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册,且类似于内建对