/*说明:这是一些随手记录的内容,暂未系统的排序和分级,后续可能会整理,也可能就是这样/*

1.对象的遍历

1.for in

for(let key in obj){
        console.log(obj[key])
    }

2.Object.keys()

2.扩展运算符(...)

1.哪些对象可以使用?
可迭代对象,包括数组、类数组对象(字符串、arguments对象、NodeList)、Set、Map

2.为什么?
扩展运算符默认调用的是对象的iterator接口,任何配置了iterator接口的对象都可以使用扩展运算符

3.什么是可迭代对象?
存在[Symbol.iterator]方法的对象,我们可以在可迭代对象本身或原型身上找到[Symbol.iterator]方法,该方法的出现为的是ES6语法中的 for of

3.模块化标准

模块化的优点或者说为什么模块化?
避免命名冲突;更好地分离;按需加载;更高复用性;高可维护性。

commonJS

  • 起初是为了弥补JS语言模块化缺陷
  • 语言层面的规范,主要应用于Node.js
  • 分为引入、定义、标识符三个部分
  • Moudle在任意模块中可直接使用,包含当前模块信息
  • Require接收标识符,加载目标模块
  • Exports与modules.exports都能导出模块数据
  • 同步加载

AMD(Asynchromous Module Definition - 异步模块定义)

  • 异步加载
  • 可并行加载多个模块
  • 加载完即执行,无法保证执行顺序
  • RequireJS在推广过程中对模块定义的规范化产出

CMD

  • 异步加载
  • 依赖就近(按需加载)
  • 加载完成后需调用执行
  • SeaJS在推广过程中对模块定义的规范化产出

ES6

  • 异步加载
  • 输出值的引用
  • 编译时输出
  • 在代码静态解析阶段就会发生

ES6和commonJS的区别?

  1. common JS在运行时加载模块,ES6在编译时加载模块
  2. common JS输出的是值的复制(深拷贝),ES6输出的是值的引用

4.在bable将ES6语法转义为ES5时,会如何处理let和const?

1.let定义的变量是全局变量,则直接将let变成var
2.块级作用域中,会将let声明的关键字前加下划线生成新的关键字后再用var进行声明
let a => var _a
3.循环体中闭包的情况,会将循环体转换为自执行函数

5.Map和Object的区别

1.键的取值类型:Map可以取任意值;Object只能是字符串或Symbol

2.插入顺序:Map会保持插入顺序;Object会按照自身规则排序

3.迭代:Map可迭代,可使用for-of及forEach;Object默认不可迭代,遍历需使用for-in、Object.keys()、Object.values()、Object.entries()等方法

4.原型:Map默认不会覆盖原型属性;Object可覆盖

5.操作:

MapObject
创建new关键字new、{}
新增mapObj.set('a',1)obj.a = 1 / obj[a] = 1
查询mapObj.get('a')obj.a / obj[a]
删除mapObj.delete('a')delete obj.a / delete obj[a]
长度mapObj.size()Object.keys(obj).length

6.函数柯里化

将原函数转化,转化后返回一个可以继续调用的函数,可以继续调用以达到继续传参的目的,传入的参数会被放入闭包中储存起来,等到真正运算时,再将之前传入的所有参数运算后返回最终结果

应用:参数复用*;提前返回(不同环境执行不同方法);延迟计算:记账,科学计算器等。

*参数复用:需要多次执行的函数中有部分参数是相同的,此时可以先传入相同参数,而后返回具有差异化参数的闭包函数,此时只在外部调用闭包函数传差异参数即可

7.promise的三种状态

1.初始态——pending
promise执行后的初始状态,在resolved或rejected之前会一直处于该状态,pending状态是promise中唯一可以进行转变的状态

2.成功态——resolved/fulfilled
promise执行resolved()后将状态从pending转变成resolved/fulfilled,不可逆

3.失败态——rejected
promise执行rejected()后将状态从pending转变成rejected,不可逆

8.git中merge和rebase的区别

两者都可以用来合并代码,区别在于,merge合并方式相当于把dev和master做合并后再推到master上去(暂不考虑冲突),rebase合并则是直接把dev基于的分支(基础分支)变为最新的master。
like this:
image.png
(个人理解,不对的话欢迎指正)

9.get和post的区别

getpost
向服务器获取数据向服务器提交数据
参数放置在URL中参数放置在request body
参数长度限制在2k无限制
参数会被保留在浏览器历史中不保留
参数只能采用URL编码支持多种编码
浏览器回退时是无害的浏览器回退会造成数据重复提交
请求会被浏览器主动缓存不会

10.webpack的loader

名称作用
ts-loaderTS-->JS
postcss-loader添加css中的前缀
less-loader/sass-loaderless/sass-->css,转换成js模块
css-loader解析css文件,合并为一段css代码
style-loader将一段css代码转换成style标签插入到HTML的head中
file-loader处理文件(图片)地址,替换成访问地址,并储存在对应位置
url-loader类似于file-loader,多了图片大小配置功能
vue-loader解析.vue文件,将解析出的script逻辑代码、style样式、template模板交给对应的loader
raw-loader将文件文件原始内容作为字符串加载,UTF-8编码
babel-loaderES6-->ES5
imports-loader将其他模块导入到当前模块中,处理非模块化规范编写的文件
eslint-loader编译前检查ES6语法

11.浏览器状态码

代码含义
1**信息,请求收到,继续处理
2**成功,行为被成功地接受、理解和采纳
200正常;请求已完成
201正常;紧接 POST 命令
202正常;已接受用于处理,但处理尚未完成
203正常;部分信息。返回的信息只是一部分
204正常;无响应。已接收请求,但不存在要回送的信息,只有响应头没有body数据
3**重定向
301已移动。请求的数据具有新的位置且更改是永久
302已找到。请求的数据临时具有不同 URI
303请参阅其它。可在另一URI下找到对请求的响应,且应使用 GET 方法检索此响应
304未修改。未按预期修改文档。客户端发起了get请求,但页面内容自上次请求以来并未发生变化
305使用代理。必须通过位置字段中提供的代理来访问请求的资源
306未使用。不再使用;保留此代码以便将来使用
4**客户端中出现的错误
400错误请求。请求中有语法问题,或不能满足请求
401未授权。未授权客户端访问数据
402需要付款。表示计费系统已有效
403禁止。即使有授权也不允许访问
404找不到。服务器找不到给定的资源;文档不存在
407代理认证请求。客户端首先必须使用代理认证自身
415介质类型不受支持。服务器拒绝服务请求,因为不支持请求实体的格式
5**服务器中出现的错误
500内部错误。因为意外情况,服务器不能完成请求
501未执行。服务器不支持请求的工具
502错误网关。服务器接收到来自上游服务器的无效响应
503无法获得服务。由于临时过载或维护,服务器无法处理请求

西风
1 声望0 粉丝

一个程序猿