随笔分类 - JavaScript学习心得
摘要:一、问题 如果一个请求跨域了,这个请求会不会在服务端被执行? 这个问题看似简单,但是其实这一个问题就足以看出大家对跨域的理解,如果平时只是了解了个概念, 那这个问题大概率不会答的那么好。 二、解决思路 1、其实这个问题主要要从以下几个方面去考虑: (1)跨域究竟是谁的策略? (2)在什么时机会拦截请
阅读全文
摘要:一、问题背景 为了防止信息泄露或知识产权被侵犯,在web的世界里,对于页面和图片等增加水印处理是十分有必要的,水印的添加根据环境可以分为两大类,前端浏览器环境添加和后端服务环境添加,根据实现方式又可以分为两大类,显性水印和数字水印。简单对比一下这两种方式的特点: 1、前端浏览器加水印: (1)减轻服
阅读全文
摘要:看到这个问题,相信大家都觉得这个题目实在基础的不能再基础了。随手百度一下,就能看到很多人说:基本类型存在栈中,引用类型存在堆中。真的这么简单么? 如果js中基础类型是存在栈里的,那为什么默认栈区大小为984KiB的V8可以允许声明500MiB大小的字符串呢?如果基础类型也是存在堆里的,又是怎么gc的
阅读全文
摘要:一、Map 和 WeakMap 有什么不同之处 1、Map 是为了解决对象中的 key 只能为字符串的缺陷 //基本的对象 const obj = { 'name': '张飞',, 'age': 18 } // Map let m = new Map() a.set(obj,1) 我们的 Map 是
阅读全文
摘要:这篇文章主要记录及介绍一下前端实现隐写术及相关知识,具体内容不细节展开,因为感觉工作中实用性不强,就是知道有这个东西,可以实现这些东西,以后如果需要使用的话,再细细研究学习,不过真的感觉不错,会玩,哈哈。 主要推荐下面这篇文章:《通过文本与图片的隐写来隐藏信息(非常有意思!)》- https://m
阅读全文
摘要:一、HTTP 拦截器的设计与实现 1、拦截器简介 对于大多数 SPA 应用程序来说, 通常会使用 token 进行用户的身份认证。这就要求在认证通过后,我们需要在每个请求上都携带认证信息。针对这个需求,为了避免为每个请求单独处理,我们可以通过封装统一的 request 函数来为每个请求统一添加 to
阅读全文
摘要:一、Pomise.all 的使用 Promise.all 可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被 reject 失败状态的值。代码示例如下: let p1 = new Promise((
阅读全文
摘要:一、并发控制简介 在日常开发过程中,你可能会遇到并发控制的场景,比如控制请求并发数。那么在 JavaScript 中如何实现并发控制呢?在回答这个问题之前,我们来简单介绍一下并发控制。 假设有 6 个待办任务要执行,而我们希望限制同时执行的任务个数,即最多只有 2 个任务能同时执行。当 正在执行任务
阅读全文
摘要:一般在我们工作中,主要会涉及到 9 种文件下载的场景,每一种场景背后都使用不同的技术,其中也有很多细节需要我们额外注意。 在浏览器端处理文件的时候,我们经常会用到 Blob 。比如图片本地预览、图片压缩、大文件分块上传及文件下载。在浏览器端文件下载的场景中,比如我们今天要讲到的 a 标签下载、sho
阅读全文
摘要:HTTP 请求的头信息里面,Referer 是一个常见字段,提供访问来源的信息。很多开发者知道这个字段,但是说不清它的具体细节。本文详细介绍该字段。 一、Referer 的含义 现实生活中,购买服务或加入会员的时候,往往要求提供信息:"你从哪里知道了我们?",这叫做引荐人(referrer),谁引荐
阅读全文
摘要:Javascript 中的数组是个强大的家伙:你可以创建的时候不规定长度,而是动态的去改变长度。你可以把他当成普通的数组去读取,也可以当他是堆栈来使用。你可以改变数组中每个元素的值甚至是类型。其实它是一个对象,比如我们可以这样去创建数组:var array = new Array(10); Java
阅读全文
摘要:一、Uint8Array 介绍 Uint8Array 数组类型表示一个8位无符号整型数组,创建时内容被初始化为0。创建完后,可以以对象的方式或使用数组下标索引的方式引用数组中的元素。 详细介绍见 MDN 描述:https://developer.mozilla.org/zh-CN/docs/Web/
阅读全文
摘要:在日常工作中,文件上传是一个很常见的功能。在某些情况下,我们希望能限制文件上传的类型,比如限制只能上传 PNG 格式的图片。针对这个问题,我们会想到通过 input 元素的 accept 属性来限制上传的文件类型。这种方案虽然可以满足大多数场景,但如果用户把 JPEG 格式的图片后缀名更改为 .pn
阅读全文
摘要:前端监控的关键在于:(1)能够收集到用户信息;(2)能够将收集到的数据上报给服务器。 也就是说,只要能上报数据,无论是请求GIF文件,还是请求js文件或者是调用页面接口,服务器端其实并不关心具体的上报方式。向服务器端上报数据,可以通过请求接口,请求普通文件,或者请求图片资源的方式进行。为什么所有系统
阅读全文
摘要:一、Array.prototype.reduce() reduce() 方法对数组中的每个元素执行一个由您提供的 reducer 函数(升序执行),将其结果汇总为单个返回值。 const array1 = [1, 2, 3, 4]; const reducer = (previousValue, c
阅读全文
摘要:一、Array.from() Array.from() 方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。 1、语法:Array.from(arrayLike[, mapFn[, thisArg]]) arrayLike:必传参数,想要转换成数组的伪数组对象或可迭代对象。 mapFn:
阅读全文
摘要:很早之前写过一篇 FormData 对象方法的介绍,可以看这篇:HTML5 FormData 方法介绍以及实现文件上传:上传文件实例、FormData 对象方法介绍 一、FormData.append() FormData 接口的 append() 方法 会添加一个新值到 FormData 对象内的
阅读全文
摘要:在日常工作中,文件上传是一个很常见的功能。在项目开发过程中,我们通常都会使用一些成熟的上传组件来实现对应的功能。一般来说,成熟的上传组件不仅会提供漂亮 UI 或好的交互体验,而且还会提供多种不同的上传方式,以满足不同的场景需求。 一般在我们工作中,主要会涉及到 8 种文件上传的场景,每一种场景背后都
阅读全文
摘要:个性化推荐系统,设计的巧妙就可以立竿见影地提升运营效率和用户转化率,尤其在内容分发、电商、社交等领域实践相当出彩(微博、各新闻门户、头条、京东、探探等都取得了不错的成绩),个性化推荐已经成为一个产品的基础建设。 本文从整体上介绍一个完整的推荐系统所需的模块(不深入到细枝末节),核心包括内容源、内容处
阅读全文
摘要:一、内部原理 exports = module.exports = {} exports 是 module.exports 的引用,怎么理解这句话呢?大概就是 var a = {}; var b = a; a 和 b 之间的关系吧。 1、require:在文件中 require 实际引入的是 mod
阅读全文